OpenGL, кажется, использует (слишком агрессивную) отбраковку усеченного конуса, которую я не вижу, как изменить
Я пытаюсь заставить приложение OpenGL работать на C++. Похоже, что OpenGL отбраковывает отдаленные и близкие объекты.
Снимок экрана должен быть загружен квадратными плитками, но квадраты, которые находятся на определенном расстоянии слишком близко или слишком далеко от камеры, не отображаются. Это означает, что фактически отображается только узкая полоса квадратов (между тем, что я считаю ближним и дальним плоскостями).
Я не использую отбраковку усеченного конуса, единственное, что я выбрал, - это отбраковка с тыльной стороны. Есть ли у OpenGL какой-то тип усеченного конуса по умолчанию? Есть ли что-то, что мне нужно включить, используя glEnable, чтобы все мои треугольники действительно отображались? Включение GL_DEPTH_TEST останавливает абсолютно все от рендеринга, независимо от того, вызову ли я впоследствии glFrustum(...).
Благодарю.
2 ответа
Исправлена. Не уверен, почему, но это было только рендеринг частей треугольника, которые имели свои мировые координаты (в отличие от координат относительно камеры) между 1 и -1. Исправлено использование функции gluPerspective() вместо glMatrixMode(GL_PROJECTION) с последующим вызовом glFrustum(...).
До сих пор никто не знает, почему он не сломался, но, по крайней мере, он работает сейчас:)
Где-то в вашем коде вы должны инициализировать projectionMatrix:
auto projectionMatrix = glm::mat4 perspective(fovy, aspect, zNear, zFar);
или же
auto projectionMatrix = gluPerspective(fovy, aspect, near, far);
что-то вроде строки выше. ZNear и zFar определяют нижнюю и дальнюю границы вашего frustrum. Значения Thoose отобразят вашу позицию фрагмента на [-1, +1].
Каждый фрагмент с z == near
будет сопоставлен с -1. Все с глубиной меньше, чем рядом будет отброшено.
Попробуйте найти параметры ближнего и дальнего расстояния и изменить их значения на то, что соответствует вашей сцене. Избегайте 0 в качестве близкого значения, вы также можете попробовать переместить камеру, чтобы увидеть некоторые изменения.