我正在拍攝Nvidia Optix示例3D模型中的圖片。我修改了Optix SDK progressivePhotonMap以達到我的目標。 我在progressovePhotonMap代碼和OpenGL代碼中擁有相同的攝像機位置,相同的攝像機方向和相同的視場(FOV)。然而,相機的視圖彼此有很大不同,如下所示。爲什麼optix中的攝像機視圖與OpenGL不同?
輸出圖像:
在左手邊是從progressivePhotonMap輸出畫面,另一側是從OpenGL的輸出。您可以看到左下方的電源點(由兩條紅線的交點表示)不在兩張圖片中的相同位置上。
我知道Optix是基於OpenGL編寫的,所以我很困惑爲什麼這兩張圖片(相機視圖)在相同的相機參數中不一樣。
這裏是我的理由認爲:因爲在顯示幀GlutDisplay.cpp的
1.Maybe問題是近及遠的參數,該gluPerspective()是沒有用的。我無法給出近和遠的參數(即使在ppm.cpp中),那麼如何以及在哪裏可以添加這兩個參數?
2.可能optix投影平面不在平面附近?在OpenGL中,我們可以將近平面視爲投影平面,而不是optix?
3.也許optix的3D模型的演示與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
我的照片再次輸出,並找到HFOV(水平FOV)也許是理由是,在兩張圖片中,窗口的高度在我的屏幕中是一樣的。在我看來,在OpenGL中,hfov和vfov在gluPerspective中是一樣的。所以我認爲hfov是我的optix代碼中這兩種相機視圖不同的原因。
但是,我仍然不知道如何修改ppm.cpp中的hfov。我總是認爲我給InitialCameraData的FOV可以表示hfov和vfov。如果這個想法是錯誤的,我應該在哪裏修改hfov?我只能調整vfov參數作爲源代碼顯示。任何熟悉progressivePhotonMap示例的人都可以告訴我在哪裏修改hfov? 謝謝任何迴應!
您可能想要發佈源代碼。無論如何,看這兩幅圖像,看起來兩者之間的視場差別很大。如何生成投影矩陣? – Xirema
對不起,我不能(不知道如何)從optix代碼獲得投影矩陣;(他們強姦它成爲一個針孔相機,也許在他們的庫中處理它(這就是爲什麼我找不到爲什麼視野是這樣的)。 –
我在主題中發佈一些源代碼,希望它可以幫助。謝謝你的迴應! –