Я пытаюсь реализовать удаление усеченного конуса в моей игре OpenGL 2d. Единственный вид геометрических объектов в моей игре на данный момент - это прямоугольники, поэтому я думал, что это будет довольно легко, но я получаю неожиданные результаты. Я установил симметричную перспективную проекцию с углом обзора поля 45 градусов, а ближняя и дальняя плоскости - 0,01 и 50 соответственно. Вектор вектора всегда параллелен оси z, камера может двигаться только по осям x и y.Задача прямоугольника прямоугольника от 0 до
Моя идея состояла в том, чтобы получить прямоугольную область пространства мира, которая в настоящее время видима для камеры в z-координате прямоугольника, который я пытаюсь отбросить. Поскольку камера смотрит в центре усеченного, рассчитать расстояние до краев этой видимой прямоугольной области следующим образом:
GLfloat maxDistance = givenRectangle.z * tanf(0.5 * (fovAngle * M_PI/180));
Тогда я добавлять и вычитать это расстояние к и от й и у координат чтобы получить максимальный и минимальный видимый x и y, а затем проверить данный прямоугольник, чтобы увидеть, находится ли он между этими значениями.
Мой вопрос в том, находится ли я на правильном пути здесь и почему приведенная выше формула возвращает абсурдно маленькое значение (что-то * 10^-37), когда у меня есть объект в z = 5, который должен быть явно видимым с помощью Камера в (0,0,0)?
Вы хотите сказать, что 3D? –
Да, технически у меня есть только 2d прямоугольники в 3D-перспективе, так что бы вы не хотели называть это :) Причина, по которой мне нужна перспектива, заключается в том, что я хочу иметь возможность увеличения и уменьшения масштаба, у меня есть мир с ориентация камеры сверху вниз – Jacob
не могли бы вы объяснить мне эту часть: тогда я добавляю и вычитаю это расстояние в координаты x и y камеры и получаю максимальные и минимальные видимые x и y, а затем проверяю данный прямоугольник, чтобы увидеть если он находится между этими значениями. – jocelyn