Получить границы плоскости, видимой по определенной координате z

Используя OpenTK, я создал окно (800x600) с вертикальным углом обзора 90°. Я хочу сделать 2D-игру с фоновым изображением, которое умещается на весь экран. То, что я хочу, это плоскость с координатой переменной z в виде RectangleF.

В настоящее время мой код:

var y = (float)(Math.Tan(Math.PI / 4) * z);
return new RectangleF(aspectRatio * -y, -y, 2 * aspectRatio * y, 2 * y);

Рассчитанный таким образом прямоугольник всегда немного мал, этот эффект уменьшается с увеличением z. Надеюсь, кто-то найдет мою ошибку.

2 ответа

Решение

Я хочу сделать 2D-игру с фоновым изображением, которое умещается на весь экран.

Тогда не беспокойтесь о перспективных расчетах. Просто переключитесь на ортографическую проекцию для рисования фона, отключив глубину записи. Затем переключитесь на перспективную проекцию для остальных.

OpenGL - это не граф сцены, это API для рисования. Воспользуйтесь этим фактом.

Чтобы сделать 2D-игру с использованием OpenGL, вы должны использовать ортогональную проекцию, как показано в этом уроке.

Тогда просто заполнить экран любым изображением, которое вы хотите, потому что вы не имеете дело с перспективой.

Однако, если бы вы настаивали на том, чтобы делать все так, как вы говорите, тогда вам придется проклеить 4 угла экрана, используя текущую матрицу просмотра модели, а затем нарисовать четырехугольник в трехмерном пространстве с этими углами. Даже при использовании этого метода вполне возможно, что квадроцикл иногда не покрывает весь экран из-за ошибок с плавающей запятой.

Другие вопросы по тегам