c – 如何通过自己的中心旋转所有对象,然后将它们转换为实际位置(它不起作用)

使所有未与原点中心对齐的对象(vector3(0.0f,0.0f,0.0f))围绕其自身的中心轴旋转的方法是什么?

伪代码中的问题:

vector3 vector3 objectCenter = (10,5,0); // current object center
vector3 vector3 objectPosition = (40,5,0); // Place to translate the object
vector3 objectRotation; = 45.0f;

    matrix.loadIdentity ();
    matrix.translate (objectCenter);

    //apply transformations
    matrix.rotateX (objectRotation);

    matrix.translate (-objectCenter);

    //itś work correctly until here
    //when i try to translate the object to the real position, the rotation is incorrect.

    matrix.translate (objectPosition);

我使用C,glm(矩阵管理)和OpenGL.

如果要将对象本地旋转到其自己的坐标系,请执行以下操作:

M=inverse(inverse(M)*rotation_matrix);

> M是您的对象变换矩阵
> rotation_matrix是任何旋转(glRotate())
> inverse是计算逆矩阵的函数
>你可以使用我的inverse matrix computation
>或者这个rotation around LCS x (lrotx) implementation in C++ (at the bottom of the answer)

[edit1]更多关于M和它所代表的坐标系之间的关系

>看这里:transform matrix anatomy
> M原点通常是物体的中间(或者是旋转运动中心的点)
> M的轴通常与物体对齐
>例如在飞机中,X轴通常是飞行方向
>我更习惯于z轴作为向前方向运动
> x为右,-x为左
> y为up,-y为down
>然后,髓,偏航,滚动是围绕x,y,z的对象局部旋转

https://stackoverflow.com/questions/25974144/how-to-rotate-all-objects-by-their-own-centers-and-then-translate-them-to-the-re

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 如何通过自己的中心旋转所有对象,然后将它们转换为实际位置(它不起作用)