2013-02-23 9 views
7

W przypadku uboju tylnej ściany możesz użyć normalnej twarzy, aby zobaczyć, czy twarz jest skierowana od aparatu, możesz wykonać trochę techniki, jeśli trójkąt jest narysowany zgodnie z ruchem wskazówek zegara lub przeciwnie do zegara .co jest prawą ścianą w openGL

Jestem zdezorientowany tą techniką zgodnie z ruchem wskazówek zegara. Wydaje się, że dzięki tej metodzie kolejność danych wierzchołków wysyłanych do karty graficznej decyduje, czy jest skierowana w stronę kamery, czy też nie. Nie widzę, jak to ma sens, ponieważ kamera może patrzeć w dowolnym kierunku, to tak, jakby dane werteksów musiałyby się zmieniać w zależności od położenia kamery, co oczywiście nie jest wykonywane na procesorze.

Jak mogę to zrozumieć?

+0

powiązane pytanie na stronie matematycznej: http://math.stackexchange.com/questions/297588/for-bsp-generation-how-to-intersect-lub-locate-a-triangle-with-a-plane- Zdefiniowany-b/297905 # 297905 –

Odpowiedz

10

to jeden trójkąt patrząc od przeciwległych stron:

clockwise vs counterclockwise

3 punktów w przestrzeni 3D definiowania trójkąt. Ponadto, jeśli te punkty są uporządkowane (jak tutaj), określają również dwie strony (ściany) trójkąta: zgodnie z ruchem wskazówek zegara i przeciwnie do ruchu wskazówek zegara (są określane przez zegar porządkowy umieszczony wewnątrz powierzchni, która wskazywałaby jego wierzchołki)

W powyższym przykładzie trójkąta jest teksturowane lewo

teraz wyobraź sobie ten trójkąt jest elementem kostce:

ccw textured box

Jeśli wyrzucisz kostką (lub obracanie kamery wokół niej) nasz trójkąt z CCW staje się CW i nie chcemy, aby tekst był już teksturowany.

Ta kostka będzie w rzeczywistości zbudowana z 12 takich trójkątów, a jeśli zamówimy je prawidłowo, będziemy teksturować tylko 6, które są skierowane w stronę kamery na raz.

+1

Po prostu chcę dodać, że jest to również znane jako * chiralność * lub handedness, i że chiralność układu współrzędnych również określa kierunek, w którym normalne punkty, w zależności od kolejności, w której umieścisz wektory w krzyżu produkt. Stwierdzenie "a × b = -b × a" zawsze występuje, ale odwracanie chiralności ma taki sam efekt. – datenwolf

+0

, więc zamówienie, albo CW, albo CCW, mówi GPU, która strona jest z przodu, ale nie rozumiem, jak to jest możliwe, ponieważ orientacja kamery decyduje o tym, czy twarze są skierowane do przodu, czy dalej. –

+0

dokładnie. o to chodzi. po lewej stronie powyższego obrazu kamera znajduje się "za" trójkątem, a na prawej stronie jest "z przodu". i chcesz tekstury tylko z jednej strony. – fsw

5

pokażę ci to na przykładzie quad:

(0,0)-------(1,0) 
    |   | 
    |  X  | 
    |   | 
    (0,1)-------(1,1) 

Załóżmy, że zaczynają w (0,0). Teraz, jeśli zbijasz (przechodzisz) wierzchołki w kolejności "zgodnej z ruchem wskazówek zegara", następnymi będą (1,0), (1,1) i (0,1). (1,0) określa mniej więcej na godzinę 2, (1,1) to 4, i tak dalej.

W ten sposób dane w pamięci GPU: 0,0, 1,0, 1,1, 0,1.

Po skorelowaniu kierunku przewijania z ustawieniem, można łatwo odróżnić "przód" od "pleców" - aby wyobrazić sobie, że lepiej, można go narysować na czymś przezroczystym, a następnie spojrzeć z drugiej strony - na wiatr. kierunek w górę zostanie odwrócony.

Tak więc określenie kierunku zwijania jest tylko powiedzą GPU, która strona jest z przodu, i która z nich jest z powrotem, ponieważ nie może zrobić to samodzielnie - obie strony trójkąta są równie dobre, a normalny wektor danego wielokąta może być N lub -N. Jednak GPU może sprawdzić, które z nich jest dostosowane do właściwej kolejności rozruchu.

Rozdział 2 zma kilka ładnych wyjaśnień dotyczących specyficznych dla OpenGL rzeczy, które wciąż są aktualne.

+0

, więc zamówienie, albo CW, albo CCW, mówi GPU, która strona jest z przodu, ale nie rozumiem, jak to jest możliwe, ponieważ orientacja kamery decyduje o tym, czy twarze są skierowane do przodu, czy dalej. –

+0

Właśnie o to chodzi. Jeśli "patrzysz" na twarze od tyłu, można je po prostu zignorować podczas rysowania, ponieważ będą z pewnością zasłonięte przednimi licami (przezroczyste modele są wyjątkiem - w tym przypadku zarówno przednia, jak i tylna strona muszą być pociągnięty). –

1

Dokładnie to jest: kolejność wierzchołków nie ma nic wspólnego z orientacją kamery początkowo, kiedy tworzysz/rysujesz twarz! Zauważ, że kamera jest jedynie transformacją, a nie czymś, co jest rozpoznawane przez openGL.
Tak więc, podczas renderowania, po "obejrzeniu" przez kamerę, openGL po prostu sprawdza (jeśli włączona jest funkcja usuwania) nową kolejność wierzchołków czołowych, teraz zgodnie z nową orientacją (po zastosowaniu wszystkich transformacji) , aby wyświetlić twarz lub nie.

Powiązane problemy