gpt4 book ai didi

c++ - OpenGL 使物体粘在相机上

转载 作者:行者123 更新时间:2023-11-30 04:47:30 26 4
gpt4 key购买 nike

为了更好地了解 OpenGL 的矩阵和顶点数学到底发生了什么,我想看看是否可以让一个对象“粘”在我的“相机”前面。我已经玩了几天了,感觉我越来越接近了。

到目前为止,我已经设法让物体跟随相机的运动,除了它的旋转(我似乎无法弄清楚这个前 vector )。要创建对象的新位置,我有以下代码:

glm::mat4 mtx_trans = glm::mat4(1.0f);
mtx_trans = glm::translate(mtx_trans, camera->getPosition() + camera->getFront());

glm::vec4 cubePosVec4 = glm::vec4(0.0f, 0.0f, -3.0f, 1.0);
cubePosVec4 = mtx_trans * cubePosVec4;

cubePositions[9] = glm::vec3(cubePosVec4.x, cubePosVec4.y, cubePosVec4.z);

其中camera->getPosition()获取相机当前位置 vector ,camera->getFront()获取相机当前前方 vector 。

如前所述,我正在了解这里发生的一切,所以我可能做错了......在这种情况下,我应该如何将对象“锁定”一定距离远离相机?

最佳答案

如果对象应该始终位于相对于相机的相同位置,那么您必须跳过 View 矩阵的转换。

请注意, View 矩阵从世界空间转换为 View 空间。如果对象应该始终放置在相机前面,那么对象就不必放置在世界中,它必须放置在 View 中。因此,对象的“ View ”矩阵是单位矩阵。

因此,在您的案例中,对象的常见模型 View 变换是对象沿 z 轴负方向的平移。平移必须是负数,因为 z 轴指向 View 外(在 View 空间中):

glm::mat4 mtx_trans = glm::mat4(1.0f);
mtx_trans = glm::translate(mtx_trans, glm::vec3(0.0f, 0.0f, -3.0f));

关于c++ - OpenGL 使物体粘在相机上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56229367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com