C 旋转矩阵收缩对象?

C 旋转矩阵收缩对象?,c,opengl,trigonometry,model-view,rotational-matrices,C,Opengl,Trigonometry,Model View,Rotational Matrices,我的数学错了吗?用户应该能够输入以度为单位的角度,并分别旋转矩阵。相反,它会收缩对象并翻转它。。。召唤 glmxRotate(&modelview, 0.0f, 0.0f, 1.0f, 90.0f); (modelview是一个单位矩阵)产生: 常规: 轮换: 以下是GLMX: glmxvoid glmxRotate(glmxMatrix* matrix, glmxfloat x, glmxfloat y, glmxfloat z, glmxfloat angle) {

我的数学错了吗?用户应该能够输入以度为单位的角度,并分别旋转矩阵。相反,它会收缩对象并翻转它。。。召唤

glmxRotate(&modelview, 0.0f, 0.0f, 1.0f, 90.0f);
(modelview是一个单位矩阵)产生:

常规:

轮换:

以下是GLMX:

glmxvoid glmxRotate(glmxMatrix* matrix, glmxfloat x, glmxfloat y, glmxfloat z,
    glmxfloat angle)
{
    if(matrix -> mx_size != 4){GLMX_ERROR = GLMX_NOT_4X4; return;}

    //convert to rads
    angle *= 180.0f / 3.14159;

    const glmxfloat len = sqrtf((x * x) + (y * y) + (z * z)),
                    c = cosf(angle),
                    c1 = 1.0f - c,
                    s = sinf(angle);

    //normalize vector
    x /= len;
    y /= len;
    z /= len;

    glmxfloat rot_mx[] = {x * x * c1 + c,
                          x * y * c1 + z * s,
                          x * z * c1 - y * s,
                          0.0f,

                          x * y * c1 - z * s,
                          y * y * c1 + c,
                          y * z * c1 + x * s,
                          0.0f,

                          x * z * c1 + y * s,
                          y * z * c1 - x * s,
                          z * z * c1 + c,
                          0.0f,

                          0.0f,
                          0.0f,
                          0.0f,
                          1.0f,};

    _glmxMultiMatrixArray(matrix, rot_mx, 4);
}

另外,如果翻译矩阵是用最后四列中的翻译定义的,那么如何翻译单位矩阵,因为结果总是会产生0?

我觉得你的矩阵是正确的,尽管你知道你的角度到rads的乘法实际上是弧度到角度的乘法吗

//convert to rads
angle *= 180.0f / 3.14159;

在我看来,你的矩阵应该是
Pi/180.f

,不过你知道你的角度到半径的乘法实际上是弧度到角度的乘法吗

//convert to rads
angle *= 180.0f / 3.14159;

应为
Pi/180.f

,因为存储在sin和cos中的空间有限,因此无法精确计算,这意味着每次旋转对象时都会发生小错误,这意味着随着时间的推移,对象将变小。 如果不希望发生这种情况,请使用四元数进行旋转。

由于存储在sin和cos中的浮点空间有限,因此无法精确计算,这意味着每次旋转对象时都会发生小错误,这意味着随着时间的推移,对象会变小。 如果不希望发生这种情况,请使用四元数进行旋转。

是否有方法计算该误差,然后将对象缩放到该误差百分比?我提前两周完成的课堂作业。我一直在努力思考这个问题的数学方面,以及它会是什么样子。我使用的是矩阵旋转公式。感谢您的帮助。是否有方法计算该错误,然后将对象缩放到该错误百分比?我提前两周完成的课堂作业。我一直在努力思考这个问题的数学方面,以及它会是什么样子。我使用的是矩阵旋转公式。谢谢你的帮助。