Opengl 旋转矩阵问题,除了旋转,我的对象也会被平移

Opengl 旋转矩阵问题,除了旋转,我的对象也会被平移,opengl,Opengl,旋转矩阵问题,除了旋转,我的对象也会被平移 Matrix m = new Matrix(); m.SetRotate(new Vector(0, 0, 1), Math.PI / 4); m.PrintMatrix(); for (int i = 0; i < 6; i++) { _spaceship.VertexPositions[i] *= m; } 矩阵m=新矩阵(); m、 SetRotate(新向量(0,0,1),Math.PI/4); m、

旋转矩阵问题,除了旋转,我的对象也会被平移

Matrix m = new Matrix();   
m.SetRotate(new Vector(0, 0, 1), Math.PI / 4);  
m.PrintMatrix();    
for (int i = 0; i < 6; i++)    
{  
_spaceship.VertexPositions[i] *= m;  
}
矩阵m=新矩阵();
m、 SetRotate(新向量(0,0,1),Math.PI/4);
m、 PrintMatrix();
对于(int i=0;i<6;i++)
{  
_宇宙飞船.VertexPositions[i]*=m;
}
  • 我创建了一个身份矩阵

  • SetRotate使其成为旋转矩阵,用于绕z轴旋转pi/4

  • 我打印了更多的矩阵来检查SetRotate是否有效,它确实有效,所以SetRotate的工作做得很好,一定是其他原因造成了问题

  • _宇宙飞船是一个有6个顶点(两个三角形)的精灵,每个顶点都与旋转矩阵相乘。VertexExpositions存储每个顶点位置的向量


  • 所以旋转矩阵很好,我检查了向量矩阵乘法也很好,我不明白额外的平移是从哪里来的。我的物体确实旋转了π/4,但是它被平移了X:-14.1421356237309,Y:-16.6170093578839,Z:0,它应该是所有的零X:0,Y:0,Z:0,就像旋转之前一样。

    你的宇宙飞船的顶点位置已经偏移了吗?如果要围绕模型中心旋转模型,请确保模型顶点相对于中心。

    在进行旋转之前,可能需要规范化vec3。

    m.PrintMatrix()的输出是什么;?显示x、y和z值;它们对应于六个顶点中的哪一个?您还可以显示旋转前后的六个顶点的值。矩阵乘法不会相互转换。对于矩阵乘法,*=运算符可能没有正确重载?0.707106781186548 0.707106781186547 0-0.707106781186547 0.707106781186548 0 0 1 0 00@przemo_li:自由使用
    new
    (以及在指针中存储结果的缺失),这是java或C++ java,不是C++。我猜C语言,除非Java在上次检查之后获得操作符重载。