0

我一直在遵循照明指南并为我的旋转立方体设置光源(通过用户交互在 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);
4

1 回答 1

1

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

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

于 2011-01-29T20:02:36.360 回答