c++ - 如何在opengl中改变物体相对相机的位置?

标签 c++ opengl

我需要更改对象相对于相机位置的位置。我的意思是,我的物体应该始终位于相机前面。它应该跟随相机的移动。我需要什么来添加我的对象绘制功能?

最佳答案

如果您使用旧式固定函数矩阵,相对于相机定位对象的最简单方法是在从堆栈中删除相机矩阵之后执行此操作。例如,您可能有这样的矩阵设置:

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/

相关文章:

c++ - 比特集比 bool 数组快吗?

multithreading - OpenGL 几何性能

C++ libPng 写一个透明背景的PNG

c++ - 为什么我的自定义分配器比默认分配器慢

c++ - 在初始化对象上调用虚方法的段错误

c++ - 在 gDebugger 中运行我的程序时出现奇怪的结果

c++ - 来自文本文件的 OPENGL 地形

c++ - 2d HUD 无法在 QGLWidget 上正确绘制(使用 QPainter)

c++ - 使用 VAO/VBO 的 OpenGL 模型/纹理渲染

c++ - 如何将 gmail 中的 mpz_t 存储在 mongodb 上?