2016-06-07 6 views
0

간단한 경로 추적 프로그램을 작성 중이며 OpenGL을 사용하여 미리보기를 만들고 싶습니다. 그러나 OpenGL 파이프 라인은 프로젝션 매트릭스를 사용하기 때문에 OpenGL 및 경로 추적으로 렌더링 된 이미지는 약간 다릅니다. 원근 투영OpenGL 카메라와 레이 트레이서 카메라가 동일한 이미지를 표시하는 방법?

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

파라미터는 : 45.0f, WINDOW_WIDTH, WINDOW_HEIGHT, 0.01, 10000.0f OpenGL은 렌더링

I는 최종 변환 행렬은 기본 파이프 라인을 사용한다.

그리고 내 경로 추적에

나는 카메라에서 같은 광선을 생성합니다

여기
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 렌더링에 사용 된 뷰 투영 행렬을 반전하고 화면 픽셀 위치를 광선 추적기의 광선으로 변환하는 데 사용합니다.