南山五味子 2021-06-24 15:05 采纳率: 0%
浏览 33

SharpGL/OpenGL 用鼠标旋转对象时,怎么计算水平视角和仰角

OpenGL gl = sceneControl.OpenGL;
            switch (e.Button)
            {
                case MouseButtons.Left:
                    objectArcBallEffect.ArcBall.MouseMove(e.X, e.Y);
                    axisArcBallEffect.ArcBall.MouseMove(e.X, e.Y);

                    anglXY=? //视角,在XY平面上,绕Z轴,以X正向开始

                    anglXZ=? //仰角,在XZ平面上,绕X轴,以Z正向开始


                    break;

}

 

  • 写回答

1条回答 默认 最新

  • 微软技术分享 全栈领域优质创作者 2023-07-02 12:11
    关注

    您好,这个问题我可以回答你,我在之前做过D3D透视功能,其中就用到了矩阵转换以及弧度转角度,可以通过以下方式计算水平视角(anglXY)和仰角(anglXZ)

    switch (e.Button)
    {
        case MouseButtons.Left:
            objectArcBallEffect.ArcBall.MouseMove(e.X, e.Y);
            axisArcBallEffect.ArcBall.MouseMove(e.X, e.Y);
    
            // 获取ArcBall的旋转矩阵
            var objectRotationMatrix = objectArcBallEffect.ArcBall.RotationMatrix;
            var axisRotationMatrix = axisArcBallEffect.ArcBall.RotationMatrix;
    
            // 根据旋转矩阵计算水平视角和仰角
            anglXY = Math.Atan2(objectRotationMatrix[1, 0], objectRotationMatrix[0, 0]);
            anglXZ = Math.Atan2(axisRotationMatrix[2, 0], axisRotationMatrix[1, 0]);
    
            // 将弧度转换为角度(可选)
            anglXY = anglXY * 180 / Math.PI;
            anglXZ = anglXZ * 180 / Math.PI;
    
            break;
    }
    

    提醒您,不要去做外G奥。

    评论

    报告相同问题?

    悬赏问题

    • ¥30 关于#开发语言#的问题:我需要在抄板的基础上再抄板抄程序,根据RDA8851CM基础上开发
    • ¥15 oracle 多个括号,怎么删除指定的括号及里面的内容?
    • ¥15 poly函数表达式的看法
    • ¥15 我想问一下有人熟悉思科packet tracer
    • ¥15 小新14API2019想用bios调风扇
    • ¥15 Python和易语言爬虫探讨
    • ¥15 有Sakai 会吗,没做过,需要交
    • ¥20 使用vba登录公司统一登录的网页
    • ¥15 opensea上传人机验证不了
    • ¥15 RK3568 kernel5.10