gpt4 book ai didi

c++ - 游标方向 openGL c++

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:44 25 4
gpt4 key购买 nike

我希望我的 2D Sprite 始终面向我的光标旋转。

我在数学上使用 glad、SDL2 和 glm。

我尝试的“原始”方法是计算我的 Front 和我想要的对象 LookAt vector 之间的角度,并将该角度以度为单位放入 glm::rotate 矩阵中。由于某些奇怪的原因,这没有成功。另一种方法是在 quat 中执行此操作并将 quat 应用于我的模型矩阵,这也没有帮助。

我的对象以其中心在原点 (0,0,0) 进行渲染 - 因此旋转不需要进行平移。

我画了 2 个三角形来制作一个矩形,我在上面加载了我的纹理。

我的模型矩阵在理论上看起来是这样的:

model = rotate * scale;

然后我将它插入着色器(位置是我的 vec3 顶点)

position = projection * view * model * vec4(Position, 1.0f);

第一个奇怪的事情是,如果我将 90.0f 作为一个角度硬编码到 glm::rotate 中,我的对象实际上顺时针旋转了大约 120°。如果我插入 80°,它实际上会顺时针旋转约 250°。如果我插入 45°,它就是完美的 45° 顺时针旋转。所有旋转都围绕 z 轴,例如:

model = glm::rotate(model, 90.0f, glm::vec3(0.0f,0.0f,1.0f);

如果我使用四元数来模拟一个方向,它会给出 0,2&0,9 弧度之间的角度,并且无论我将光标放在哪里,我的对象似乎只会顺时针旋转 0.0° 和 45° 之间。

顺便说一句,如果我计算角度。我的两个 vector (ObjectLookAt 和 MousePosition)并存储它们我也得到了非常正确的角度,但是 glm::rotate 函数没有像我预期的那样工作。

最后,如果我简单地将角度编码为:

float angle = static_cast<float>(SDL_GetTicks()/1000);

从一个开始它实际上旋转得更奇怪。我希望它开始以 1° 速率(因为它从 1 秒开始),然后围绕 z 轴旋转一整圈,直到超过 360 秒。然而,它会在大约 6 秒内旋转 360°。所以在角度上添加“1”并作为度数插入 glm::rotate 表示 60°?

现在这是我逻辑上的缺陷吗?如果在 x-y 平面上绘制 Sprite ,我是否不围绕 z 轴旋转 Sprite ?为了安全起见,我也尝试了 x 和 y 轴,但这没有用。我真的被困在这里,我(认为我)明白它在理论上应该如何工作,尤其是当这一切都发生在“2D”中时,但我无法让它工作..

最佳答案

The first strange thing is, if I hardcode 90.0f as an angle into glm::rotate, my object is actually rotated about 120° clockwise. If I plug in 80° it actually rotates about ~250° clockwise. If I plug in 45° it's a perfect 45° clockwise rotation.

这是因为函数 glm::rotate期望以弧度为单位的角度(自 GLM 版本 0.9.6 起)。

像这样调整你的代码:

model = glm::rotate(model, glm::radians(angel_degrees), glm::vec3(0.0f,0.0f,1.0f);

另见:

关于c++ - 游标方向 openGL c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46254485/

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