간단한 경로 추적 프로그램을 작성 중이며 OpenGL을 사용하여 미리보기를 만들고 싶습니다. 그러나 OpenGL 파이프 라인은 프로젝션 매트릭스를 사용하기 때문에 OpenGL 및 경로 추적으로 렌더링 된 이미지는 약간 다릅니다. 원근 투영OpenGL 카메라와 레이 트레이서 카메라가 동일한 이미지를 표시하는 방법?
m_transformation = PersProjTrans * CameraRotateTrans * CameraTranslationTrans * TranslationTrans * RotateTrans * ScaleTrans
파라미터는 : 45.0f, WINDOW_WIDTH, WINDOW_HEIGHT, 0.01, 10000.0f
OpenGL은 렌더링
그리고 내 경로 추적에
나는 카메라에서 같은 광선을 생성합니다 여기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).
문제는 장면과 카메라 사이의 거리입니다. 내 말은, 일정하지 않다는거야. 경우에 따라 경로 추적 이미지는 객체에 "가까이"보이고 일부 경우에는 반대의 경우도 있습니다.
Google에서 아무 것도 발견하지 못했습니다.