we wstępie OpenGL ES 2.0, tu: http://www.webreference.com/programming/opengl_es/2.html moduł cieniujący wierzchołek jest określony:OpenGL ES pozycji 2,0 specifiying vec3 lub vec4
GLbyte vShaderStr[] =
"attribute vec4 vPosition; \n"
"void main() \n"
"{ \n"
" gl_Position = vPosition; \n"
"}; \n";
atrybut vPosition jest cztery składowa wektora.
Później w tekście aplikacja skompiluje moduł cieniujący wierzchołków wraz z modułem cieniującym fragment. Z glBindAttribLocation uchwyt do przekazywania danych do aplikacji vertex shader zostanie nawiązane:
// Bind vPosition to attribute 0
glBindAttribLocation(programObject, 0, "vPosition");
W 2 shadery są teraz połączone i program jest gotowy do użycia.
Sprawa zastosowanie to:
GLfloat vVertices[] = {0.0f, 0.5f, 0.0f,
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f};
...
// Load the vertex data
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);
Co oznacza:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices)
: przekazać dane wierzchołków do programu, lokalizacja użycie 0, każdy wierzchołek ma 3 składniki, typ jest float, nie stosuje się normalizacji.glEnableVertexAttribArray(0)
: Moduł cieniujący użyje przekazanych danych.glDrawArrays(GL_TRIANGLES, 0, 3);
: Moduł cieniujący wykona kod wyciągnąć pojedynczą trójkąta, przy użyciu pierwszego (a), tylko trzy znajdujące się w określonej tablicy wierzchołków.
Kim pytania:
werteksach oczekuje pozycji cztery elementem wierzchołkowy (X, Y, Z, W), program przechodzi tylko trzy składniki (x, y, z) dane Dlaczego to działa?
Moduł cieniujący potrzebuje vec4, składnik w musi mieć wartość 1, aby działał zgodnie z oczekiwaniami. Który krok jest odpowiedzialny za prawidłowe dodanie komponentu w?
Cześć Jave - dzięki za odpowiedź i link. Sprawy stają się coraz jaśniejsze. – Gisela
@ Gisela Jeśli odpowiedź rozwiązała Twój problem, [accepting] (http://stackoverflow.com/faq#howtoask) jest poprawną odpowiedzią. –
@christian: gotowe – Gisela