在OpenGL C#中放大/缩小

时间:2018-12-27 12:15:30

标签: c# opengl opentk

我正在尝试创建一个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。但是我有一些限制。如果我超过这些限制,场景将消失。您有什么想法要解决吗?我不想限制缩放。

1 个答案:

答案 0 :(得分:0)

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

致电Matrix4.CreatePerspectiveFieldOfView时,请增加depthFar,这应该可以解决您的问题。