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

Render object in front of camera in OpenGL

本文关键字:前面 对象 相机 OpenGL      更新时间:2023-10-16

我想要一个直接放在相机前面的物体(例如球体)(比如说"5厘米"在前面)。移动摄影机时,对象应始终跟随摄影机的移动。

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

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);

现在,我不想"坐"在球体内,我宁愿把球体放在相机前面几个单位。我似乎不知道如何正确平移球体,使其始终与相机的方向向量对齐。

将偏移矢量添加到相机观察方向的位置:

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