Увеличение / уменьшение масштаба в OpenGL C # - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь создать проект OpenGL C # для увеличения и уменьшения масштаба сцены.Я хочу войти и выйти из режима увеличения при нажатии клавиши Z.И затем, когда я нахожусь в режиме масштабирования (клавиша 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;
    }

Здесь я просто изменяю eyeVector из матрицы lookat.Но у меня есть некоторые ограничения.Если я выйду за эти пределы, сцена исчезнет.У вас есть идеи, чтобы решить эту проблему?Я не хочу ограничения для увеличения.

1 Ответ

0 голосов
/ 21 января 2019

Я могу оказать очень большую помощь, не видя вашего полного кода, но вы проверили плоскости отсечения?Это звучит как случай из учебника, когда плоскость отсечения находится слишком близко;проверьте свою матрицу перспективы.

Когда вы звоните Matrix4.CreatePerspectiveFieldOfView, увеличьте глубину, что должно решить вашу проблему.

...