C++ 光标方向openglc++;
我希望我的2D精灵始终朝向光标旋转 我使用GLADY、SDL2和glm进行数学运算 我尝试的“原始”方法是计算我的前面和我想要的对象注视向量之间的角度,并将该角度以度为单位放入C++ 光标方向openglc++;,c++,opengl,matrix,rotation,glm-math,C++,Opengl,Matrix,Rotation,Glm Math,我希望我的2D精灵始终朝向光标旋转 我使用GLADY、SDL2和glm进行数学运算 我尝试的“原始”方法是计算我的前面和我想要的对象注视向量之间的角度,并将该角度以度为单位放入glm::rotate矩阵中。 由于某种奇怪的原因,这一切都没有实现。 另一种方法是在一个quat中执行,并将quat应用于我的模型矩阵,这也没有帮助 我的对象以原点(0,0,0)为中心进行渲染-因此旋转不需要进行平移 我画了两个三角形来制作一个矩形,在上面加载纹理 我的模型矩阵理论上是这样的: model = rotat
glm::rotate
矩阵中。
由于某种奇怪的原因,这一切都没有实现。
另一种方法是在一个quat中执行,并将quat应用于我的模型矩阵,这也没有帮助
我的对象以原点(0,0,0)为中心进行渲染-因此旋转不需要进行平移
我画了两个三角形来制作一个矩形,在上面加载纹理
我的模型矩阵理论上是这样的:
model = rotate * scale;
然后将其插入着色器(其中位置是我的vec3
顶点)
第一件奇怪的事情是,如果我将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°之间顺时针旋转
顺便说一句,如果我计算两个向量(ObjectLookAt和MousePosition)的角度并存储它们,我也会得到非常正确的角度,但是glm::rotate函数并没有像我预期的那样工作
最后,如果我简单地将角度编码为:
float angle = static_cast<float>(SDL_GetTicks()/1000);
float angle=static\u cast(SDL\u GetTicks()/1000);
从一开始,它的旋转更奇怪。
我希望它开始以1°的速度旋转(因为它以1秒开始),然后围绕z轴旋转一整圈,直到360秒结束。
然而,它在大约6秒内旋转360°。因此,是否曾经在角度上添加“1”并插入glm::rotate
,作为度表示60°
这是我逻辑上的一个缺陷吗?如果精灵绘制在x-y平面上,是否不绕z轴旋转?
为了安全起见,我也试过x&y轴,但没用。
我真的被困在这里了,我(想我)从理论上理解了它应该如何工作,尤其是当它发生在“2D”中时,但我无法让它工作
第一件奇怪的事情是,如果我硬编码90.0f作为glm::rotate的角度,我的对象实际上是顺时针旋转120°。如果我插入80°,它实际上会顺时针旋转约250°。如果我插入45°,这是一个完美的顺时针旋转45°
这是因为函数需要以弧度为单位的角度(自GLM版本0.9.6起)
调整您的代码,如下所示:
model = glm::rotate(model, glm::radians(angel_degrees), glm::vec3(0.0f,0.0f,1.0f);
另见:
model = glm::rotate(model, glm::radians(angel_degrees), glm::vec3(0.0f,0.0f,1.0f);