我有一个我想要旋转的立方体。我也有一个光源GL_LIGHT0。我想旋转立方体并将光源固定在其位置。但是光源和我的立方体一起旋转。我使用的是OpenGL ES 1.1 这是我的代码片段,可以让我的问题更清晰。
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);
}
感谢。
答案 0 :(得分:2)
修正了什么?当您执行glLightfv(GL_LIGHT0, GL_POSITION, light0Position);
如果您希望它与多维数据集一起移动,则必须在翻译和轮换调用后将glLightfv(GL_LIGHT0, GL_POSITION, light0Position);
移动到该位置。
答案 1 :(得分:0)
问题似乎是你正在旋转模型视图矩阵,而不是旋转立方体本身。基本上,你正在移动相机。
为了仅旋转立方体,您需要旋转构成立方体的顶点。通常使用库(GLUT或某些此类)或简单的trig来完成。在glDrawElements调用之前,您将对存储在数组中的顶点数据进行操作。您可能/可能不需要或想要修改法线或纹理坐标,这取决于您的效果以及它最终的外观。