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;

}

 

您好,这个问题我可以回答你,我在之前做过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奥。