光标方向openGL C
cursor orientation openGL c++
我希望我的2D精灵在始终面对光标的同时旋转。
我正在使用Glad,SDL2&GLM用于数学。
我尝试使用的"原始"方式是计算对象的前部和所需的lookat向量之间的角度,并将该角度以 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°&amp之间旋转。顺时针45°,无论我在哪里放置光标。
如果我计算角度btw。我的两个矢量(objectookat&鼠标)并存储它们,我得到的角度也很正确,但是glm ::旋转函数无法正常工作。
最后,如果我简单地将角度编码为:
float angle = static_cast<float>(SDL_GetTicks()/1000);
从一个开始,它实际上旋转了更奇怪。我希望它会开始速度1°(从1秒开始),然后在Z轴上旋转一个圆圈,直到360秒以上。但是,它在大约6秒内旋转360°。因此,曾经在角度上添加并插入glm::rotate
的" 1"代表60°?
现在这是我的逻辑中的缺陷吗?如果在X-y平面上绘制Z轴,我是否不会在Z轴上旋转?我也尝试了X&amp;Y轴只是为了安全起见,但这无效。我真的被困在这里,我(认为我)理论上应该如何工作,尤其是因为所有这些都发生在" 2d"中,但我无法正常工作。
第一个奇怪的事情是,如果我将90.0F作为GLM ::旋转的角度,那么我的对象实际上是顺时针旋转的。如果我插入80°,它实际上会顺时针旋转约250°。如果我插入45°,则是完美的45°顺时针旋转。
这是因为函数 glm::rotate
期望弧度的角度(因为GLM版本0.9.6)。
这样调整您的代码:
model = glm::rotate(model, glm::radians(angel_degrees), glm::vec3(0.0f,0.0f,1.0f);
另请参见:
- GLM旋转OpenGL
- glm ::旋转似乎会导致旋转错误?
- glm:将学位作为参数的功能被弃用(使用弧度时)
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 使用Unreal C++获取VR耳机的世界位置/方向
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- 在C++中向零方向近似的最佳方法
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL通常"Up"方向?
- OpenGL:在那个方向上旋转和移动
- OpenGL沿方向矢量移动播放器
- 光标方向openGL C
- OpenGL/GLM-切换坐标系方向
- OpenGL-在随机方向上移动的对象
- 车辆方向OpenGL