OpenGL放大

问题描述 投票:1回答:1

我正在使用OpenTK绘制2D图形。我通过根据OnMouseWheel事件更改Projection矩阵中的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);
    }
c# opengl opentk
1个回答
3
投票

缩放效果很好,但是受到fovy的限制> 0

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

在透视投影时,对象的大小会减小到视点的距离。因此可以“缩放”和物体到摄像机的距离分别使摄像机沿着视线移动。

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

© www.soinside.com 2019 - 2024. All rights reserved.