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

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 LD衰减图用R语言对其可视化
  • ¥15 Mermaid语法生成的svg在Axure无法编辑
  • ¥15 Windchill二次开发
  • ¥15 怎么把tkinter和其他代码结合起来使功能可以完善
  • ¥15 爬取豆瓣电影相关处理
  • ¥15 手机淘宝抓清除消息接口
  • ¥15 C#无selenium
  • ¥15 用机器学习方法帮助保险公司预测哪些是欺诈行为
  • ¥15 数据爬取,python
  • ¥15 怎么看 cst中一个面的功率分布图,请说明详细步骤。类似下图