在OpenGL中渲染相机前面的对象
Render object in front of camera in OpenGL
我想要一个直接放在相机前面的物体(例如球体)(比如说"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);
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 为什么不能在对象参数前面使用常量?
- 在OpenGL中渲染相机前面的对象
- 重载对象前面带有数字的运算符+(int)