我一直关注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);
答案 0 :(得分:1)
您指定给OpenGL ES的位置和聚光灯方向在调用glLightfv时由当前模型视图矩阵进行变换,并在其被模型视图矩阵转换后应用于顶点。调用glDrawArrays / glDrawElements。两者都没有考虑投影矩阵的状态。
为了让我们了解您的转换可能出现的问题,您需要准确显示何时将对象/世界/相机转换应用于模型视图矩阵,以及相对于灯光属性规范和绘图的位置此