gpt4 book ai didi

c++ - OpenGL 组合旋转

转载 作者:行者123 更新时间:2023-11-28 06:07:05 24 4
gpt4 key购买 nike

我无法理解如何使用 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 但不是使用矩阵而是在我想绘制它们时只向顶点坐标添加一些数字会更好吗?

最佳答案

您还应该反转矩阵顺序:

glRotatef(-deltaMouse.y*mouseSensitivity,0,0,1);
glRotatef(-deltaMouse.x*mouseSensitivity,0,1,0);
mouse=sf::Mouse::getPosition();
...

但是,如果多次执行此操作,也会引入滚动旋转。如果您不想这样,请将两个角度都存储在变量中。然后,当鼠标移动时,只需更新这两个变量。在渲染之前,从头开始计算旋转矩阵(负载标识,旋转 1,旋转 2)。

关于c++ - OpenGL 组合旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32184242/

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