我需要更改对象相对于相机位置的位置。我的意思是,我的物体应该始终位于相机前面。它应该跟随相机的移动。我需要什么来添加我的对象绘制功能?
最佳答案
如果您使用旧式固定函数矩阵,相对于相机定位对象的最简单方法是在从堆栈中删除相机矩阵之后执行此操作。例如,您可能有这样的矩阵设置:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(...); //Or other camera functions.
for(/*each object*/)
{
glPushMatrix();
//Setup object matrices.
glTranslatef();
glRotatef();
//Setup object rendering.
glDrawElements(); //Draw the object
glPopMatrix();
}
然后将其切换为:
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
gluLookAt(...); //Or other camera functions.
for(/*each object*/)
{
glPushMatrix();
//Setup object matrices.
glTranslatef();
glRotatef();
//Setup object rendering.
glDrawElements(); //Draw the object
glPopMatrix();
}
glPopMatrix(); //Remove camera matrix. MODELVIEW is now identity.
for(/*each camera-relative object*/)
{
glPushMatrix();
//Setup object matrices.
glTranslatef();
glRotatef();
//Setup object rendering.
glDrawElements(); //Draw the object
glPopMatrix();
}
如果您使用着色器,这会更容易。如果您有矩阵堆栈,只需执行与此处看到的相同的基于堆栈的操作即可。如果您正在做其他事情来构建矩阵,请不要将相机矩阵纳入变换中。
关于c++ - 如何在opengl中改变物体相对相机的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518412/