Nella 2.0 introduzione OpenGL ES, trovato qui: http://www.webreference.com/programming/opengl_es/2.html un vertex è definito:OpenGL ES 2.0 posizione specifiying attributo vec3 o vec4
GLbyte vShaderStr[] =
"attribute vec4 vPosition; \n"
"void main() \n"
"{ \n"
" gl_Position = vPosition; \n"
"}; \n";
L'attributo vPosition è un componente di vettore quattro.
Più avanti nel testo l'applicazione compilerà il vertex shader, insieme allo shader di frammenti. Con il glBindAttribLocation una maniglia per passare i dati applicazioni vertex è stabilito lo Shader:
// Bind vPosition to attribute 0
glBindAttribLocation(programObject, 0, "vPosition");
I 2 shader sono ora collegati e il programma è pronto per l'uso.
Il caso d'uso è questo:
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);
che significa:
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices)
: passare i dati di vertice al programma, uso posizione 0, ogni vertice ha 3 componenti, tipo è fluttuare, non si deve usare la normalizzazione.glEnableVertexAttribArray(0)
: Lo shader utilizzerà i dati passati.glDrawArrays(GL_TRIANGLES, 0, 3);
: Lo shader eseguirà il codice per disegnare un singolo triangolo, utilizzando i primi (e solo) tre vertici trovati nell'array specificato.
mie domande sono:
Il vertex si aspetta una posizione quattro componente vertice (x, y, z, w), il programma passa solo tre componenti (x, y, z) dati Perché funziona?
Lo shader ha bisogno di un vec4, il componente w deve essere 1 per funzionare come previsto. Quale fase è responsabile per l'aggiunta del componente w in modo corretto?
Ciao Jave - grazie per la risposta e il collegamento. Le cose stanno diventando più chiare. – Gisela
@Gisela Se la risposta ha risolto il problema, [accettare] (http://stackoverflow.com/faq#howtoask) è la risposta corretta. –
@christian: fatto – Gisela