Перекошенный усеченный, не искажающий сцену

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

Код, который я использовал для внеосевого проецирования:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(frustumLeft, frustumRight, frustumBottom, frustumTop, frustumNear, frustumFar);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, headZ);
drawWalls();

Когда пользователь смотрит на ось, сцена выглядит так:
введите описание изображения здесь

Когда усеченное смещение было смещено вне оси, сцена выглядит так:
введите описание изображения здесь

Тем не менее, то, что я ожидал, в некоторой степени соответствовало следующему изображению (достигнуто с помощью gluLookAt и ассиметричного усеченного конуса).
http://i40.tinypic.com/9uteh3.png

Для вышеприведенной программы я использовал ассиметричный усеченный конус только для указания громкости просмотра, а при изменении параметров (2-е изображение) заставлял сцену выглядеть немного переводной (без искажений). Мне интересно, если это правильное поведение или я что-то пропустил и не получил искажения (например, 3-е изображение) в сцене, которая должна была быть там. Разве перекос фрустума сам по себе не должен давать мне искаженный вывод сцены?

1

Решение

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

если мы меняем положение камеры или то, где она видит, то изменяется симметрия нашего объекта.
Как если бы вы двигали головой влево или вправо по оси x, симметрия экрана вашего компьютера изменится.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]