2016-06-07 52 views
0

我正在寫一個簡單的路徑跟蹤器,我想用OpenGL進行預覽。 但是,由於OpenGL管道使用投影矩陣,因此使用OpenGL和Path跟蹤渲染的圖像有點不同。如何讓OpenGL相機和Ray-Tracer相機顯示相同的圖像?

對於OpenGL渲染我使用基本的管道,在最終變換矩陣是:

m_transformation = PersProjTrans * CameraRotateTrans * CameraTranslationTrans * TranslationTrans * RotateTrans * ScaleTrans 

參數透視投影是:45.0f, WINDOW_WIDTH, WINDOW_HEIGHT, 0.01, 10000.0f

而在我的路徑示蹤我生成光線從相機這樣的:

m_width_recp = 1.0 /0m_width; 
m_height_recp = 1.0/m_height; 
m_ratio = (double)m_width/m_height; 

m_x_spacing = (2.0 * m_ratio)/(double)m_width; 
m_y_spacing = (double)2.0/(double)m_height; 
m_x_spacing_half = m_x_spacing * 0.5; 
m_y_spacing_half = m_y_spacing * 0.5; 

x_jitter = (Xi1 * m_x_spacing) - m_x_spacing_half; 
y_jitter = (Xi2 * m_y_spacing) - m_y_spacing_half; 

Vec pixel = m_position + m_direction * 2.0; 
pixel = pixel - m_x_direction * m_ratio + m_x_direction * (x * 2.0 * m_ratio * m_width_recp) + x_jitter; 
pixel = pixel + m_y_direction - m_y_direction*(y * 2.0 * m_height_recp + y_jitter); 

return Ray(m_position, (pixel-m_position).norm()); 

下面是由OpenGL的(1)和路徑示蹤渲染的圖像(2)。 enter image description here enter image description here

問題是場景和相機之間的距離。我的意思是,這不是恆定的。在某些情況下,路徑跟蹤圖像看起來比較接近對象,在某些情況下反之亦然。

我還沒有在google上找到任何東西。

回答

1

反轉用於OpenGL渲染的視圖投影矩陣,並使用該矩陣將屏幕像素位置轉換爲光線跟蹤器的光線。