放大 OpenGL

Zooming-in OpenGL

我正在使用 OpenTK 绘制二维图形。我通过根据 OnMouseWheel 事件更改投影矩阵中的 fovy 值来放大。缩放效果很好,但受到 fovy >0 的限制。我需要放大更多以查看图表的更多细节。有没有更好的不受任何数字限制的放大方法?

     private void OnRenderFrame()
    {
        Matrix4 view, projection;
        projection = Matrix4.CreatePerspectiveFieldOfView(((float)fov * (float)Math.PI) /(float)180, (float)Width / (float)Height, 0.01f, 100f);
        view = Matrix4.LookAt(CameraPos,
        CameraPos + CameraFront, CameraUp);
        shader.Use();
        shader.SetMatrix4("model", Matrix4.Identity);
        shader.SetMatrix4("view", view);
        shader.SetMatrix4("projection", projection);
        SwapBuffers();
        base.OnRenderFrame(e);
    }

 protected override void OnMouseWheel(MouseWheelEventArgs e)
    {

       if (fov > 90.0f)
        {
           fov = 90.0f;
        }
        else if (fov <5.0f)
        {
            fov = 5.0f;
        }
        else 
        {
            fov -= e.DeltaPrecise;
        }

        base.OnMouseWheel(e);
    }

The zooming works fine but it is limited by fovy > 0

当然透视投影定义了一个Viewing frustum。如果 fovy == 0 则观看音量为 0,这根本没有任何意义。

在透视投影中,物体的大小随着到视点的距离而减小。因此可以"zoom"和物体通过到相机的距离分别沿视线移动相机。

视线是相机的前方矢量(CameraFront)。