OpenGL旋转过于敏感

时间:2014-02-09 01:48:43

标签: opengl haskell matrix linear-algebra

我最近从使用已弃用的gl_*Matrix切换到自己处理矩阵。一切似乎都很好,除了旋转大约是应该的80倍。我可以切换到使用opengl的矩阵而不更改任何其他代码,并且旋转很好。完整的来源位于Github。最相关的功能在这里:

calculateMatricesFromPlayer :: GameObject a -> WorldMatrices
calculateMatricesFromPlayer p@(Player{}) =
    let Vec3 px py pz = playerPosition p
        Vec3 rx ry _ = playerRotation p

        -- Create projection matrix
        projMat = gperspectiveMatrix 45 (800/600) 0.1 100

        -- Create view matrix
        rotatedMatX = grotationMatrix rx [-1, 0, 0]
        rotatedMatXY = rotatedMatX * grotationMatrix ry [0, -1, 0]
        translatedMat = gtranslationMatrix [-px, -py, -pz]
        viewMat = rotatedMatXY * translatedMat

        -- Model matrix is identity by default
        modelMat = gidentityMatrix
    in WorldMatrices modelMat viewMat projMat

有什么明显的我做错了吗?

1 个答案:

答案 0 :(得分:8)

由于圆圈中有360度和2*pi弧度,pi约为3,因此使用度数似乎很可能超出约80倍作为sincostan函数的输入,这些函数将输入视为弧度,因为360/(2*pi)大约为80。