2016-04-20 3 views
0

Я работаю над съемкой в ​​3D-модели по образцу Nvidia Optix. Я изменил Optix SDK progressivePhotonMap, чтобы достичь своей цели. У меня такое же положение камеры, что и направление камеры и такое же поле зрения (FOV) в моем коде progressovePhotonMap и коде OpenGL. Однако вид камеры сильно отличается друг от друга, как показано ниже.Почему камера в optix отличается от OpenGL?

Вывод изображения:

enter image description here

На левой от входа выводится изображение с progressivePhotonMap, с другой стороны, выводится из OpenGL. Вы можете увидеть левую нижнюю точку питания (указать по пересечению двух красных линий), которые не располагаются в одном положении на двух снимках.

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

Вот моя мысль о причине:

1.Maybe проблема ближнего и дальнего параметра, из-за отображения кадров в GlutDisplay.cpp, то gluPerspective() бесполезны. Я не могу дать параметр «ближний и дальний» (даже в ppm.cpp). Итак, как и где я могу добавить эти два параметра?

2. Планета проекции проектора 2.Maybe не находится вблизи плоскости? В OpenGL мы можем видеть около плоскости в качестве плоскости проектирования, но не в optix?

3. Может быть, презентация 3D-модели в optix просто отличается от OpenGL ??? (я обнаружил, что эти две картины имеют разные искажения друг с другом). Так что я не могу избежать этой ситуации?

Я проследил весь проект и не нашел никакой полезной информации, может ли кто-нибудь помочь мне или дать некоторую идею/совет о том, почему эта ситуация происходит? Я буду очень признателен за любой ответ. Спасибо!

Существует короткий исходный код, надеемся, что это будет полезно.

В OpenGL:

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
gluPerspective(FOV,(GLdouble)windWidth/(GLdouble)windHeight , NEAR, FAR); 
gluLookAt(camera_pos[0],camera_pos[1],camera_pos[2], 
     look_at_target[0],look_at_target[1],look_at_target[2], 
     up_vector[0], up_vector[1], up_vector[2]); 

В Optix:

InitialCameraData init_camera; 
init_camera = InitialCameraData(make_float3(camera_pos[0], camera_pos[1],camera_pos[2]),make_float3(look_at_target[0],look_at_target[1],look_at_target[2]),make_float3(0.0f, 1.0f, 0.0f)/*up*/,FOV); 
GLUTDisplay::setCamera(init_camera); 
signalCameraChanged(); 

обновление в 4/21 16:11 Reoutput images

Я reoutput фотографии и найти ВЧКИВЛ (горизонтальный FOV), может быть, причина, кажется, в двух картинах высота окна одинакова на моем экране. По моим знаниям, hfov и vfov одинаковы в gluPerspective в OpenGL. Поэтому я думаю, что hfov является причиной того, что эти два вида камеры отличаются в моем коде optix.

Однако я до сих пор не знаю, как изменить hfov в ppm.cpp. Я всегда думаю, что FOV, которое я даю InitialCameraData, может указывать на hfov и vfov. Если эта идея неверна, где мне следует изменить hfov? Я могу настроить параметр vfov только в качестве исходного кода. Может ли кто-нибудь, знакомый с образцом progressivePhotonMap, сказать мне, где мне изменить hfov? Спасибо любому ответу!

+2

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

+0

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

+0

Я размещаю некоторый исходный код в теме, надеюсь, что это может помочь. Спасибо за ваш ответ! –

ответ

0

Основное отличие/проблема в том, что в Optix я не вижу матрицу проекций.В лучшем случае я вижу, что Optix устанавливает Field of View одновременно с настройкой информации о камере, но отсутствие параметра Aspect Ratio меня беспокоит, тем более, что, смотря на изображение Optix более близко, стул выглядит сильно искаженным в горизонтальной оси, что является менее проблемой в рендеринге OpenGL (который правильно предоставляет информацию об отношении формата).

Другая вещь, которую я бы заметил, - это проверить, как Optix ожидает, что параметр поля обзора будет предоставлен. GLU ожидает его в градусах и рассматривает его как y-Field-Of-View. Я не знаю, как Optix ожидает этого, но многие API-интерфейсы ожидают, что Field of View будет предоставлен относительно оси x.

 Смежные вопросы

  • Нет связанных вопросов^_^