2016-12-13 21 views
1

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

Ниже представлен внешний вид ошибки. enter image description here

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

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; 
} 

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

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

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

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

+2

в первую очередь, вы должны будете предоставить все другие преобразования, кроме матрицы проекции (View, Мир, и все, что еще у вас есть). Очевидно, необходим вершинный буфер для куба – Ap31

+0

У вас есть ключ к вопросу о том, какая проблема может быть? – JekasG

+2

@JekasG: Ваш куб может просто выйти за пределы Z <= рядом, но мы не можем сказать это, не видя настройки преобразования и вершины куба. Вы смотрите на куб по его диагонали, длина которого удлиняется на коэффициент sqrt (3 * 1²) = sqrt (3) = ~ = 1.73'. – datenwolf

ответ

2

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

cube cut

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

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

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