2011-10-10 7 views
22

Rozumiem, że glVertexAttribPointer ustawi wartości dla atrybutu wierzchołka na podstawie wskazanej tablicy. Ale co to jest glVertexAttrib? Wygląda na to, że po prostu ustawia pojedynczą (prawdopodobnie wektorową) wartość dla atrybutu wierzchołka, a więc co się dzieje, gdy masz wiele wierzchołków? Czy wszystkie wierzchołki kończą się, widząc tę ​​samą wartość atrybutu?Do czego służy glVertexAttrib (versus glVertexAttribPointer)?

Odpowiedz

40

To było głównie używane ze starym trybem bezpośrednim (glBegin/glEnd), w którym nie używasz tablic wierzchołków, który jest przestarzały (i usunięty w OpenGL ES 2.0 i rdzeniu OpenGL 3+ pulpitu).

Ale ta funkcja nadal ma zastosowanie w tablicach (dlatego wciąż jest dostępna we współczesnych wersjach). Masz rację, zakładając, że wszystkie wierzchołki następujące po tym wywołaniu mają tę samą wartość dla tego atrybutu (tylko, jeśli nie włączasz oczywiście tablicy tego atrybutu). Lub dokładniej, każdy używany atrybut modułu cieniującego, który nie ma odpowiadającej mu tablicy, pobiera jego wartość z pojedynczej wartości stanu i ta wartość może zostać zmieniona za pomocą glVertexAttrib.

Jest to przydatne, jeśli masz ogólny moduł cieniujący zawierający np. atrybut koloru i atrybut pozycji i masz obiekt o stałym kolorze. Tak więc za pomocą glVertexAttrib nie musisz przesyłać koloru dla każdego wierzchołka, ani nie musisz używać specjalnego modułu cieniującego z kolorem zmienionym na jednolity.

+2

Użycie jednego koloru jest dobrym przykładem. Dzięki! –

+0

Niesamowita odpowiedź :-) Zawsze zadawałem sobie pytanie, dlaczego zamiast jednolitego użyto stałego atrybutu; ale twój przykład ma dla mnie sens. – Mecki