如何使OpenGL相机和Ray-tracer相机显示相同的图像?

时间:2016-06-07 14:30:14

标签: opengl 3d camera render raytracing

我正在编写一个简单的路径跟踪器,我想用OpenGL进行预览。 但由于OpenGL管道使用投影矩阵,因此使用OpenGL和路径跟踪渲染的图像有点不同。

对于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)和Path Tracer(2)渲染的图像。 enter image description here enter image description here

问题是场景和相机之间的距离。我的意思是,这不是一成不变的。在某些情况下,路径跟踪器图像看起来“更接近”对象,在某些情况下反之亦然。

我在google中找不到任何内容。

1 个答案:

答案 0 :(得分:1)

反转用于OpenGL渲染的视图投影矩阵,并使用它将屏幕像素位置转换为光线跟踪器的光线。