【问题标题】:camera in ray tracing光线追踪中的相机
【发布时间】:2012-06-19 17:45:41
【问题描述】:

我在光线追踪中完全坚持使用相机。请看一下我的计算并指出错误在哪里。我使用的是左手坐标系。

x,y //范围 [0..S) x [0..S) //像素坐标

现在,让我们将像素坐标转换为相机平面的参数坐标:

xp = x/S * 2 – 1; 
yp = y/S * 2 – 1;

xp, yp // 范围 [-1..1] x [-1..1]

相机基础的计算:

//eye - camera position
//up - camera up vector
//look_at - camera target point

vec3 w = normalize(look_at-eye);
vec3 u = cross(up,w);
vec3 v = cross(w,u);

所以光线方向应该有以下坐标:

vec3 dir = look_at – eye + xp*u + yp*v;
ray3 ray = {eye, normalize(dir)};

【问题讨论】:

  • 我不明白。为什么要计算这么多?光线不应该在相机和相机可见的兴趣点之间吗?只是两点之间的向量?

标签: graphics camera raytracing


【解决方案1】:

我认为错误就在这里:

vec3 dir = look_at – eye + xp*u + yp*v;

图像平面应该有一个法线向量w,并且要么在眼睛和观察点之间(光线追踪器中更常见的方式),要么在眼睛后面(更接近模拟实际的针孔相机) .所以让我们创建一个标量zoom_factor。正数会将平面放在眼睛前面,负数会将平面放在眼睛后面(并翻转图像)。

图像平面的中心是:

eye + zoom_factor*w

图像平面上的点(xp, yp) 是:

eye + zoom_factor*w + xp*u + yp*v

现在您希望方向是从眼睛到此图像平面上的这一点:

vec3 dir = eye + zoom_factor*w + xp*u + yp*v - eye;

eyes 取消,所以它简化为:

vec3 dir = zoom_factor*w + xp*u + yp*v

这假设 xpyp 都在 (-0.5, 0.5) 这样的范围内。请注意,(0, 0) 是这种排列的图像平面的中间。

【讨论】:

    猜你喜欢
    • 2011-08-29
    • 2022-10-02
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多