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

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奥。

    评论

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题