iPhone OpenGL-ES:阻止光源移动

时间:2011-01-28 15:02:23

标签: iphone opengl-es lighting

我一直关注lighting guide并为我的旋转立方体设置光源(通过3轴上的用户交互旋转)

然而,无论我做什么,我都无法让光源保持在正确的位置,它似乎与立方体一起旋转。因此,如果我旋转立方体,则一部分被点亮,而另一部分则没有。

我正在进行相当多的矩阵操作。我尝试重置矩阵然后应用光源,我尝试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 个答案:

答案 0 :(得分:1)

您指定给OpenGL ES的位置和聚光灯方向在调用glLightfv时由当前模型视图矩阵进行变换,并在其被模型视图矩阵转换后应用于顶点。调用glDrawArrays / glDrawElements。两者都没有考虑投影矩阵的状态。

为了让我们了解您的转换可能出现的问题,您需要准确显示何时将对象/世界/相机转换应用于模型视图矩阵,以及相对于灯光属性规范和绘图的位置此