在OpenGL中渲染相机前面的对象

时间:2014-11-03 16:38:02

标签: c++ opengl camera transformation

我想要一个直接放在相机前面的物体(例如一个球体)(让我们说" 5cm"在前面)。移动相机时,物体应始终跟随相机的移动。

在我的渲染循环中,我使用视图矩阵的倒数来计算相机在世界空间中的位置:

glm::mat4 viewMatrixInverse = glm::inverse(camera->GetViewMatrix());
glm::vec3 cameraPositionWorldSpace = glm::vec3(viewMatrixInverse[3][0], viewMatrixInverse[3][1], viewMatrixInverse[3][2]);

这似乎工作正常,当我走向世界起源时,相机位置也接近(0,0,0)。现在,当我尝试在相机位置渲染球体时,这种方法非常精细,相机始终位于球体的中心。

渲染部分如下所示:

sphere->ResetModelMatrix();
sphere->TranslateModel(cameraPositionWorldSpace);
sphere->Render(GL_TRIANGLES);

现在,我不想"坐着"在球体内部,我宁愿将球体定位在相机前面的几个单元中。我似乎无法弄清楚我必须如何正确地平移球体,以便它始终与相机的方向矢量对齐。

1 个答案:

答案 0 :(得分:3)

将偏移矢量添加到相机正在查看方向的位置:

sphere->TranslateModel(cameraPositionWorldSpace+camera->LookingDirection().normalized()*5);