Масштабирование OpenGL - PullRequest
       17

Масштабирование OpenGL

1 голос
/ 19 апреля 2020

Я строю 2D-график с использованием OpenTK. Я увеличиваю, изменяя значение fovy в матрице проекции в зависимости от события OnMouseWheel. Масштабирование работает нормально, но оно ограничено 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);
    }

1 Ответ

3 голосов
/ 19 апреля 2020

Масштабирование работает нормально, но оно ограничено fovy> 0

Конечно, перспективная проекция определяет Область просмотра . Если fovy == 0, то объем просмотра равен 0, что не имеет никакого смысла.

При перспективной проекции размер объекта уменьшается на расстоянии до точки обзора. Таким образом, можно «масштабировать» и объект на расстоянии до камеры, соответственно смещая камеру вдоль линии визирования.

Линия визирования - это фронтальный вектор камеры (CameraFront).

...