Pregunta

Tengo un cubo que quiero rotación. También tengo una GL_LIGHT0 fuente de luz. Quiero rotar el cubo y dejar la fuente de luz fija en su lugar. Sin embargo, la fuente de luz está girando junto con mi cubo. Utilizo OpenGL ES 1.1 He aquí un fragmento de mi código para hacer más clara mi pregunta.

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);
}

Gracias.

¿Fue útil?

Solución

fija con respecto a qué? La posición de la luz se transforma por la matriz MODELVIEW actual cuando lo hace glLightfv(GL_LIGHT0, GL_POSITION, light0Position);

Si desea que se mueva con el cubo que tendrá que moverse a glLightfv(GL_LIGHT0, GL_POSITION, light0Position); después de las llamadas de traslación y rotación.

Otros consejos

El problema parece ser que está girando el modelview matriz , no el cubo en sí. Esencialmente, usted se está moviendo la cámara.

Para hacer girar el cubo solo, tendrás que rotar los vértices que conforman el cubo. Generalmente eso se hace uso de una biblioteca (GLUT o algo así) o de trigonometría simple. Vas a estar operando en los datos de vértices almacenados en la matriz, antes de que los glDrawElements llaman. Usted puede / no puede tener o querer modificar las normales o las coordenadas de texturas, que depende de sus efectos y cómo se termina buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top