c# - OpenGL 4 - 欧拉旋转没有任何意义
问题描述
我在 C# 中使用现代 OpenGL,我正在尝试旋转一个四边形,使其在 X 轴上成 90 度。问题是,旋转的产品没有意义。它没有侧身,而是仅在中途左右翻转。此外,仅将度数更改 1(90 到 91)会完全改变结果。
我的欧拉顺序是:Y, X, Z。
旋转矩阵
internal Matrix4 rotx;
internal Matrix4 roty;
internal Matrix4 rotz;
internal float sin;
internal float cos;
public Matrix4 CreateRotationMatrix(float anglex, float angley, float anglez)
{
//X
cos = (float)Math.Cos(anglex);
sin = (float)Math.Sin(anglex);
rotx = new Matrix4(new Vector4(1.0f, 0.0f, 0.0f, 0.0f), new Vector4(0.0f, cos, sin, 0.0f), new Vector4(0.0f, -sin, cos, 0.0f), new Vector4(0.0f, 0.0f, 0.0f, 1.0f));
//Y
cos = (float)Math.Cos(angley);
sin = (float)Math.Sin(angley);
roty = new Matrix4(new Vector4(cos, 0.0f, -sin, 0.0f), new Vector4(0.0f, 1.0f, 0.0f, 0.0f), new Vector4(sin, 0.0f, cos, 0.0f), new Vector4(0.0f, 0.0f, 0.0f, 1.0f));
//Z
cos = (float)Math.Cos(anglez);
sin = (float)Math.Sin(anglez);
roty = new Matrix4(new Vector4(cos, sin, 0.0f, 0.0f), new Vector4(-sin, cos, 0.0f, 0.0f), new Vector4(0.0f, 0.0f, 1.0f, 0.0f), new Vector4(0.0f, 0.0f, 0.0f, 1.0f));
return (roty * rotx) * rotz;
}
然后我将其放入模型矩阵中,顺序为:缩放、平移、旋转。
我做错了什么?
X 轴旋转90 度的乘积 Y 轴旋转90 度的乘积 Z 轴旋转 90 度的乘积
解决方案
三角函数System.Math
以弧度为单位测量所有角度(用于输入和逆“弧”函数返回值的情况)。
如果您以度为单位进行设计,则必须记住在调用库函数之前将角度转换为弧度。
推荐阅读
- typescript - 如何使用打字稿相对/绝对路径
- java - ArrayList Contains with Object 总是返回 false
- javascript - mongodb 组总和子详细信息
- javascript - 为 wordpress 主题调试 Jquery
- xamarin - 如何使用命令中的 mvvm 属性将选择器值保存到 web api?
- python - Python 默认记录 exc_info
- python - scrapy如何正确导出到json
- ios - 如果删除快捷方式应用程序,INUIAddVoiceShortcutButton 将不起作用
- android - 嵌套转换而不是合并的实时数据
- c++ - C++:C++ 如何知道破坏容器内的智能指针?