Domanda

Ho un cubo che ho da ruotare. Ho anche un GL_LIGHT0 fonte di luce. Voglio ruotare il cubo e lascio la fonte di illuminazione fissata nella sua posizione. Ma la sorgente di luce è in rotazione insieme al mio cubo. Io uso OpenGL ES 1.1 Ecco un frammento del mio codice per rendere la mia domanda più chiaro.

GLfloat glfarr[] = {...} //cube points
GLubyte glubFaces[] = {...}
Vertex3D normals[] = {...} //normals to surfaces

const GLfloat light0Position[] = {0.0, 0.0, 3.0, 0.0};
glLightfv(GL_LIGHT0, GL_POSITION, light0Position);
glEnable(GL_LIGHT0);

for(i = 0; i < 8000; ++i)
{
        if (g_bDemoDone) break;
        glLoadIdentity();

        glTranslatef(0.0,0.0, -12); 
        glRotatef(rot, 0.0, 1.0,1.0);
        rot += 0.8;
        glClearColor(0, 0, 0, 1);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glEnableClientState(GL_VERTEX_ARRAY);
        glEnableClientState(GL_NORMAL_ARRAY);

        glNormalPointer(GL_FLOAT, 0, normals);

        glVertexPointer(3, GL_FLOAT, 0, glfarr);
        glDrawElements(GL_TRIANGLES, 3*12, GL_UNSIGNED_BYTE, glubFaces);

        glDisableClientState(GL_NORMAL_ARRAY);
        glDisableClientState(GL_VERTEX_ARRAY);
        eglSwapBuffers(eglDisplay, eglSurface);
}

Grazie.

È stato utile?

Soluzione

fissi in relazione a che cosa? La luce di posizione viene trasformata dalla matrice modelview corrente quando si fa glLightfv(GL_LIGHT0, GL_POSITION, light0Position);

Se si desidera muoversi con con il cubo si dovrà spostare glLightfv(GL_LIGHT0, GL_POSITION, light0Position); a dopo le chiamate di traslazione e rotazione.

Altri suggerimenti

Il problema sembra essere che si sta ruotando il modelview matrice , non il cubo stesso. In sostanza, si sta spostando la fotocamera.

Al fine di ruotare solo il cubo, avrete bisogno di ruotare i vertici che compongono il cubo. In generale questo è fatto utilizzando una libreria (GLUT o qualcosa del genere) o di semplice trigonometria. Sarete operando sui dati vertice memorizzati nella matrice, prima che i glDrawElements chiamano. Si può / non potrebbe essere necessario o vogliono modificare le normali o coordinate della texture, dipende dal vostro effetti e come si finisce per guardare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top