Matrix4旋转不会在x和y周围工作,但在z周围工作

时间:2018-02-23 12:18:08

标签: c++ opengl math

我正在尝试使一个立方体围绕所有轴正确旋转。我可以移动立方体,视图是透视,但是当我尝试旋转它时,旋转仅适用于Z轴。

即使我考虑到X轴和Y轴旋转也没有效果。我的旋转方法:

        void Matrix4::rotate(float degrees, Vector3 axis)
    {
        float c = cos(Common::degreesToRadians(degrees));
        float s = sin(Common::degreesToRadians(degrees));

        values[0] = (axis.x * axis.x) * (1.0f - c) + c;
        values[1] = (axis.y * axis.x) * (1.0f - c) + (axis.z * s);
        values[2] = (axis.z * axis.x) * (1.0f - c) - (axis.y * s);

        values[4] = (axis.x * axis.y) * (1.0f - c) - (axis.z * s);
        values[5] = (axis.y * axis.y) * (1.0f - c) + c;
        values[6] = (axis.z * axis.y) * (1.0f - c) + (axis.x * s);

        values[8] = (axis.x * axis.z) * (1.0f - c) + (axis.y * s);
        values[9] = (axis.y * axis.z) * (1.0f - c) - (axis.x * s);
        values[10] = (axis.z * axis.z) * (1.0f - c) + c;
    }

我的createTransformationMatrix函数:

        Matrix4 Matrix4::createTransformationMatrix(Vector3 position, Vector3 rotation, Vector3 scale)
    {
        Matrix4 result;
        result.translate(position);
        result.rotate(rotation.x, Vector3(1, 0, 0));
        result.rotate(rotation.y, Vector3(0, 1, 0));
        result.rotate(rotation.z, Vector3(0, 0, 1));
        result.scale(scale);

        return result;
    }

感谢您的帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

没关系,问题在于所有3个功能:缩放,旋转,翻译错误并且乱糟糟。我基于lwjgl Matrix4f类修复了它们,现在一切正常。