2010-10-17 15 views
6

Próbuję stworzyć grę 3D za pomocą OpenGL. Mam bardzo podstawowy świat i pracuję teraz nad postacią. Chcę zmapować teksturę do głowy, która będzie owalna. Jak wykonać mapowanie? Wiem, jak mapować na płaską powierzchnię. Zastanawiam się, czy normalne mogą być użyte, aby pomóc, ale nigdy wcześniej tego nie robiłem i kiedy przeszukuję Google, nie mam szczęścia.Jak mapować tekstury na zakrzywionej powierzchni?

Mam zamiar zrobić to wszystko programowo i nie używać Blendera ani Mayi, jeśli to robi jakąkolwiek różnicę.

Odpowiedz

1

Zgaduję z twojego postu, że masz się dobrze z geometrią?

W przypadku automatycznego mapowania w ogólnym przypadku, Twoje spostrzeżenie jest dobrym pomysłem - zacznij od każdego wierzchołka i podążaj jego normalnym kierunkiem na zewnątrz, aż trafisz na dobrze zdefiniowany zewnętrzny prymityw, a następnie skopiuj z niego położenie tekstury.

W tym przypadku prawdopodobnie kluczem jest sposób generowania geometrii. Jeśli robisz coś takiego, jak tworzenie 8 pierścieni z 16 punktów, efektywnie iterując wokół jednego okręgu w zewnętrznej pętli, a drugiego w wewnętrznej pętli, możesz jednocześnie iterować u i v, aby uzyskać mapowanie. Dostajesz nieregularne wielokąty i mapowanie staje się kłopotliwe na biegunach, ale obszar wokół którego twarz będzie działał całkiem dobrze.

Aby uzyskać bardziej równomierny rozmiar wielokąta i rzetelne odwzorowanie we wszystkich obszarach, należy rozpocząć od nadmiernie tesselowanego sześcianu (np. Siatka o kwadratach 8x8 na powierzchnię zamiast jednego) i odwzorować współrzędne tekstury w dowolnym znaczący sposób. Myśl kategoriami sieci sześcianu. Następnie zdeformuj sześcian w kuli, wykonując wektor od środka do każdego punktu i przesuwając punkt tak, aby był promieniem kuli od środka. Na koniec, zdeformuj kulę w owal poprzez różne skalowanie różnych osi.

Powiązane problemy