0

我正在尝试使用我的引擎启动并运行所有内容,但无法确定添加对象和灯光的顺序以正确渲染所有内容。

我在我的初始化中设置了我的投影和模型视图矩阵:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();                            

gluPerspective(75.0f,(GLfloat)width/(GLfloat)height, 0.1f , 1000.0f);

glMatrixMode(GL_MODELVIEW);                         
glLoadIdentity(); 

然后,当我渲染几何图形时,我清除缓冲区并加载单位矩阵并更新我的相机。

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

// Camera updates
glRotatef(camera.anglePitch, 1.0f, 0.0f, 0.0f);
glRotatef(camera.angleYaw, 0.0f, 1.0f, 0.0f);
glTranslatef(-camera.position.x, -camera.position.y, -camera.position.z);

// Now render
level.render();

我对我的关卡的看法是一个相机,我收集的是四处移动的眼睛坐标。我正在尝试在我的关卡中渲染对象和灯光,并让它们出现在正确的位置。

我需要在世界上的特定点添加对象。例如,在 (10, 10, 25) 处的圆环。在渲染这个圆环对象之前我需要做些什么来使它们在 10、10、25 时正确显示吗?例如,我是否需要渲染然后翻译它们?

此外,第 2 部分与灯光有关。这几乎是同一个问题。在渲染 50、50、50 的灯光时,我必须考虑什么?我可以正常定位灯还是再做一次,我必须把它翻译到那里吗?还是我想太多了?

4

1 回答 1

1

如果我理解这个问题,我同意你想多了。glTranslate 和 glRotate 的转换应用于模型视图矩阵,所有顶点乘以该矩阵以提供稍后将在投影中裁剪的眼睛坐标。同样的变换也适用于您的灯光。

您还可以使用 glPopMatrix 和 glPushMatrix 将模型视图矩阵的不同状态应用于不同的顶点。

我还建议您参考http://www.opengl.org/resources/faq/technical/transformations.htm中的问题 9.070

于 2011-12-13T01:21:22.777 回答