【发布时间】:2015-08-24 14:00:49
【问题描述】:
我无法理解如何使用 OpenGL 旋转来模拟 MMORPG 相机。我希望我的程序在我按下右键并移动鼠标时在 2 个轴(x 和 y)上旋转相机。鼠标坐标的差异beetwen 当我按下右键时,我现在所在的位置应该给我 2 个数字 x 和 y。我将使用这些数字来围绕我的角色旋转世界。
我首先检查是否按下鼠标右键,然后重做最后一次旋转并执行当前旋转。但是当它结合 2 个旋转时,我会在 z 轴上旋转。
我检查了当它们只有一个时旋转是否正常工作。
我试过了:
a) 对每个轴使用 2 个单独的 glRotatef 调用;
if(mouseRight==true)
{
glRotatef(-deltaMouse.x*mouseSensitivity,0,1,0);
glRotatef(-deltaMouse.y*mouseSensitivity,0,0,1);
mouse=sf::Mouse::getPosition();
deltaMouse=initialMouse-mouse;
glRotatef( deltaMouse.x*mouseSensitivity,0,1,0);
glRotatef( deltaMouse.y*mouseSensitivity,0,0,1);
}
所以我的问题是: 1)我如何结合 2 个旋转来模拟 MMORPG 相机 2)如果我自己创建函数来替换 glRotatef 和 glTranslatef 会更好吗?而不是使用矩阵,我只是在我想绘制它们时向顶点坐标添加一些数字?
【问题讨论】:
-
如果您围绕 x 和 y 轴旋转您的世界,您可以(并且可能会)在 z 轴上进行更改。您究竟希望相机做什么?它会在一个平面内旋转还是围绕你的角色完全旋转/轨道?
-
假设我的角色在点 (0,0,0)。现在想象一个大球体。我的角色在球体内。我对世界的看法将以点为中心属于球体。我想以不影响 z 轴(开头看到的 z 轴)的方式围绕我的角色旋转。