三维空间中对象和灯光的正确处理-OpenGL

三维空间中对象和灯光的正确处理-OpenGL,opengl,render,light,Opengl,Render,Light,我正试图用我的引擎启动并运行所有的东西,但我很难弄清楚添加对象和灯光的顺序,从而正确渲染所有东西 我在初始化中设置了投影和模型视图矩阵: glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(75.0f,(GLfloat)width/(GLfloat)height, 0.1f , 1000.0f); glMatrixMode(GL_MODELVIEW);

我正试图用我的引擎启动并运行所有的东西,但我很难弄清楚添加对象和灯光的顺序,从而正确渲染所有东西

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

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渲染灯光时,我需要考虑什么?我可以正常地定位灯吗?或者,我必须将它转换到那里吗?还是我想得太多了?

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

还可以使用glPopMatrix和glPushMatrix将modelview矩阵的不同状态应用于不同的顶点


我还想让你参考

中的问题9.070,关于你的问题有一些不清楚的地方:首先,你指的是什么原点,眼睛坐标空间的原点还是物体坐标空间的原点?第二,“渲染灯光”是什么意思?您是指多边形的着色方式,还是希望渲染看起来像光源的对象?(很抱歉在发布评论时出现了最初的混乱,我在没有写的情况下错误地保存了它:)对不起。我尽量避免这样。请告诉我我能澄清什么。@jcage如果您还有任何问题,请告诉我。我正在努力把每件事都说对。其中我有绝对坐标的水平数据,即(2.5,1.2,10.2)处的三角形,我需要渲染的对象只有它们的网格坐标,然后是它们需要去的位置。如何在正确的位置渲染这些对象?沿着加载对象然后将其转换到特定位置的路线进行的操作?我真的不确定。希望这能澄清我的问题。好吧,我要做的就是平移物体的坐标,在每个坐标上加上物体想要的位置。不需要通过modelview矩阵进行转换,只需执行向量的简单添加,并像渲染level对象一样渲染它们。好的。例如,我从一个文件加载一个对象,并希望将其添加到(100100,0)。我只需加载对象,然后将其平移到(100,100,0),然后应用我需要的任何旋转,就这样?对于需要在不同点渲染的多个对象,情况如何。我该怎么做?为了简单起见,让我们假设我在不同的位置渲染了5个圆形模型。渲染这五个圆时,循环是什么样子的。你能给我举个例子吗?谢谢。另外,我真的很抱歉措辞混乱。你所写的正是我所需要的,我只是想知道glTranslate和glRotate如何适合在不同位置渲染多个对象的函数。我相信,使用modelview矩阵执行此操作需要为每个对象重建矩阵。因此,循环将是glLoadIdentity->glRotate&Transform->obj1.render->glLoadIdentity->glRotate&Transform->obj2.render等等。我可能错了,但我认为情况就是这样