2011-01-28 85 views
0

我被以下一个lighting guide并建立一个照明源,用于我的旋转的立方体停止光源(通过用户交互旋转3轴)iPhone的OpenGL-ES:从移动

然而,无论我做什么,我可以不要让光源保持在正确的位置,它似乎与立方体一起旋转。所以如果我旋转立方体的一部分被点亮而一部分不是。

我做相当多的矩阵操作的。我尝试重置矩阵,然后应用光源,我试图glLoadIdentity()重置视图。

我似乎无法保持它仍然。

static const Vertex3D light0Position[] = {{0.0, 10.0, 10.0}}; 
glLightfv(GL_LIGHT0, GL_POSITION, (const GLfloat *)light0Position); 

// Calculate light vector so it points at the object 
static const Vertex3D objectPoint[] = {{8.0, 8.0, -4.0}}; 
const Vertex3D lightVector = Vector3DMakeWithStartAndEndPoints(light0Position[0], objectPoint[0]); 
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION, (GLfloat *)&lightVector); 

回答

1

您所指定的OpenGL ES位置和聚光灯方向由在调用glLightfv的时间的当前模型视图矩阵变换,并且被施加到一个顶点,已经通过在模型视图矩阵变换后调用glDrawArrays/glDrawElements的时间。既不考虑投影矩阵的状态。

为了让我们了解您的转换可能会出错,您需要准确显示何时将对象/世界/相机转换应用于模型视图矩阵,以及相对于光源属性指定和绘制发生的相对位置对此。

+0

有没有办法重置它。我不得不做所有类型的疯狂的东西,让立方体旋转我想要它,但我需要一个固定的光 – Burf2000 2011-01-30 17:19:02