У меня есть следующая (относительно простая) проблема. Я разрабатываю рэйтрэйсер и я следую учебник объяснил в этой ссылке:Из формулы формулы координат пикселя в мир
Существует формула я не получаю, хотя, который используется для отображения пикселя (I, J), чтобы мировые координаты. Формула такова:
float fov = 30, aspectratio = width/height;
float angle = tan(M_PI * 0.5 * fov/180.);
float xx = (2 * ((x + 0.5) * invWidth) - 1) * angle * aspectratio;
float yy = (1 - 2 * ((y + 0.5) * invHeight)) * angle;
В этом учебнике камера находится в точке (0,0,0) и вверх/вправо/LookAt вектор не используется. Кажется, что в каждом учебном пособии для сопоставления пикселя используется другая формула, и мне не удается получить причину. Кроме того, что, если моя камера не помещена в (0,0,0), но в другом положении, которое я могу решить? Как изменится формула? Можете ли вы мне помочь? Благодаря!
Вы можете смотреть на движение двумя разными способами: 1) камера движется и мир неподвижен, 2) мир движется, и камера неподвижна. Если вы зафиксируете камеру на (0, 0, 0) и направлениях вверх/вправо/смотреть в локальных направлениях y/x/z, то, если вы хотите переместить камеру с помощью вектора 'v', вы можете вместо этого перемещать мир с помощью '-v' и использовать этот же код. То же, что и вращение, вместо поворота камеры на 'theta', вращайте мир на' -theta'. –
Все объяснено в этом уроке: http://scratchapixel.com/lessons/3d-basic-rendering/3d-viewing-pinhole-camera Я не могу поверить, что некоторые люди настолько ленивы, что не читают работу, которую люди приложите много усилий и просто идите прямо к SO, чтобы задать вопрос, упомянутый в ссылке, которую они упоминают. – user18490