OpenGL возле самолета слишком сильно обрезает

У меня возникли некоторые проблемы с камерой, когда ближняя плоскость кажется слишком далекой, даже если она установлена ​​на 0,1 или ниже. Кажется, уже есть какое-то значение смещения. Таким образом, вы не можете подобраться достаточно близко к произвольному объекту на сцене.

Ниже приведен внешний вид ошибки.
введите описание изображения здесь

Показанный черный треугольник — отсечение.
В настоящее время я использую матрицу перспективы, и вот код для этого.

Matrix4x4 Matrix4x4::Perspective(Float fov, Float aspectRatio, Float near, Float far)
{
Matrix4x4 result(1.0f);

Float q = 1.0f / tan(toRadians(0.5f * fov));
Float a = q / aspectRatio;

Float b = (near + far) / (near - far);
Float c = (2.0f * near * far) / (near - far);

result.elements[0 + 0 * 4] = a;
result.elements[1 + 1 * 4] = q;
result.elements[2 + 2 * 4] = b;
result.elements[2 + 3 * 4] = -1.0f;
result.elements[3 + 2 * 4] = c;

return result;
}

Я не чувствую, что ошибка из класса математики. Это потому, что математический код в основном из другого проекта, над которым я работал. И отлично работает оттуда.
Я также не подозреваю, что это так, как я рендеринг (forward renderer). Я считаю, что мои указатели для этого хороши, так как я могу перемещать и поворачивать камеру с помощью мыши и клавиатуры.

Но! Я подозреваю, что это буферы. Буферы OpenGL. Но я не совсем уверен.

Я надеюсь, что кто-то даст мне несколько советов о том, как я могу выследить и устранить эту ошибку.

Заранее спасибо.

1

Решение

Ну, одно изображение стоит больше, чем 1000 слов, поэтому:

разрезанный куб

Как я уже упоминал в моих комментариях, если ваш куб наполовину меньше r=1.0 и вы установили камеру на расстоянии r из центра куба вы все равно будете отрезаны z_near как края куба удалены от центра в диапазоне <sqrt(2),sqrt(3)> так что все края, повернутые к камере, обрезаются …

Но также, как уже упоминалось, это только предположение, потому что вы не предоставили никаких тестовых данных, относящихся к этому (матрицы и содержимое сетки) …

PS на правой стороне — вид сбоку настроек вашей камеры. Я предполагаю, что вы установили. Зеленый (+/-)Z это ваше направление просмотра.

3

Другие решения

«glEnable (GL_DEPTH_CLAMP)» решил проблему

2