我用OpenGL(C ++)制作FPS游戏。我想将枪支之类的武器对准相机,以便她随相机移动和旋转。
我已经完成了武器与摄像机一起移动的工作,方法是从视图矩阵中移除平移部分,以使武器始终位于同一位置。
因此,我删除了翻译部分(我与OpenGL Mathematics (GLM)一起使用):
view = glm::mat4(glm::mat3(view));
问题是武器不随相机旋转。这意味着当我启动程序时,枪已正确对准,但如果我转过武器,则不要随身转动,这样我就再也看不到她了。
有人可以帮助完成将武器固定在相机上的事情吗?
答案 0 :(得分:1)
您必须在视图空间而不是世界空间中绘制“武器”。这意味着“武器”一定不能被视图矩阵转换。
通过Identity matrix初始化“武器”的视图矩阵:
view = glm::mat4(1.0f);
请注意,场景的对象似乎在世界中移动(相对于视图),因为该对象是由视图矩阵转换的。视图矩阵从世界空间转换为视图空间。视图矩阵是该矩阵的逆矩阵,它定义了相机的位置和方向。
如果必须在视图空间中绘制对象,这意味着该对象必须保持其相对于摄像机(视图)的位置,然后必须跳过视图矩阵进行的变换。对象的位置不是世界上的位置,而是相对于摄像机的位置。