在 OpenGL C# 中放大/缩小

Zoom in / out in OpenGL C#

我正在尝试创建一个 OpenGL C# 项目来放大和缩小场景。我想在按下 Z 键时进入和退出 fom 缩放模式。然后,当我处于缩放模式(第一次按下 Z 键)时,使用鼠标滚轮放大/缩小场景。当我完成缩放动作时,我希望能够退出缩放模式(再次按 Z)然后鼠标滚轮将停止缩放我的场景。感谢您的帮助!

protected override void OnUpdateFrame(FrameEventArgs e)
    {
        base.OnUpdateFrame(e);

        Matrix4 lookat = Matrix4.LookAt(eyeVector, targetVector, upVector);
        GL.MatrixMode(MatrixMode.Modelview);
        GL.LoadMatrix(ref lookat);

        KeyboardState keyboard = Keyboard.GetState();

        if (keyboard[Key.Z] && !keyboard.Equals(lastKeyPress))
        {

        }

        if (keyboard[Key.Z] && !keyboard.Equals(lastKeyPress))
        {

        }

        lastKeyPress = keyboard;
    }

这是zoomOut的函数:

public Vector3 zoomOut(Vector3 actual)
    {
        if(zoomLimits[1]<=actual.X || zoomLimits[1] <= actual.Y || zoomLimits[1] <= actual.Z) {
            Console.WriteLine("Limita de zoomOut a fost atinsa!");
            return actual;
        }

        Vector3 nou = new Vector3(actual.X + 5, actual.Y + 5, actual.Z + 5);
        return nou;
    }

这里我只是改变了lookat矩阵中的eyeVector。但我有一些限制。如果我超过这些限制,场景就会消失。你有解决这个问题的想法吗?我不想限制缩放。

在没有看到您的完整代码的情况下,我只能提供这么多帮助,但是您检查过裁剪平面了吗?这听起来像是裁剪平面太近的教科书案例;检查你的透视矩阵。

当您调用 Matrix4.CreatePerspectiveFieldOfView 时,增加 depthFar,这应该可以解决您的问题。