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

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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵