Я работаю над съемкой в 3D-модели по образцу Nvidia Optix. Я изменил Optix SDK progressivePhotonMap, чтобы достичь своей цели. У меня такое же положение камеры, что и направление камеры и такое же поле зрения (FOV) в моем коде progressovePhotonMap и коде OpenGL. Однако вид камеры сильно отличается друг от друга, как показано ниже.Почему камера в optix отличается от OpenGL?
Вывод изображения:
На левой от входа выводится изображение с 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? Спасибо любому ответу!
Возможно, вы захотите опубликовать исходный код. Во всяком случае, глядя на два изображения, похоже, что поле зрения очень отличается между ними. Как генерируются проекционные матрицы? – Xirema
Извините, я не могу (не знаю, как) получить проекционный матикс из optix-кода, (они изнасилуют его, чтобы быть камерой с отверстиями, возможно, иметь дело с ним в своей библиотеке (вот почему я не могу найти, почему поле зрения, похожее на это). –
Я размещаю некоторый исходный код в теме, надеюсь, что это может помочь. Спасибо за ваш ответ! –