2016-04-20 37 views
0

我正在拍攝Nvidia Optix示例3D模型中的圖片。我修改了Optix SDK progressivePhotonMap以達到我的目標。 我在progressovePhotonMap代碼和OpenGL代碼中擁有相同的攝像機位置,相同的攝像機方向和相同的視場(FOV)。然而,相機的視圖彼此有很大不同,如下所示。爲什麼optix中的攝像機視圖與OpenGL不同?

輸出圖像:

enter image description here

在左手邊是從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? 謝謝任何​​迴應!

+2

您可能想要發佈源代碼。無論如何,看這兩幅圖像,看起來兩者之間的視場差別很大。如何生成投影矩陣? – Xirema

+0

對不起,我不能(不知道如何)從optix代碼獲得投影矩陣;(他們強姦它成爲一個針孔相機,也許在他們的庫中處理它(這就是爲什麼我找不到爲什麼視野是這樣的)。 –

+0

我在主題中發佈一些源代碼,希望它可以幫助。謝謝你的迴應! –

回答

0

主要的區別/問題是,在Optix中,我沒有看到投影矩陣。充其量,我發現Optix在設置攝像頭信息的同時設置了視場,但缺少長寬比參數困擾着我,尤其是在更仔細觀察Optix圖像時,椅子看起來大大失真在水平軸上,這在OpenGL渲染(它正確地提供有關寬高比的信息)中不太成問題。

我會觀察到的另一件事是,你應該檢查Optix如何期望提供的視野參數。 GLU期望以度爲單位,並將其視爲y場。我不知道Optix如何期待它,但許多API需要提供相對於x軸的視場。

相關問題