1

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

glmxRotate(&modelview, 0.0f, 0.0f, 1.0f, 90.0f);

(模型视图是一个单位矩阵)产生:

常规:http: //i.imgur.com/eX7Td.png

旋转:http: //i.imgur.com/YnMEn.png

这是glmxRotate:

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?

4

2 回答 2

1

你的矩阵对我来说看起来是正确的,但你知道你的角度乘以弧度实际上是弧度乘以角度吗?

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

应该是Pi/180.f

于 2012-10-05T21:43:54.470 回答
0

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

于 2019-12-02T23:11:10.393 回答