首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >smallpt相机光线计算中的幻数意义

smallpt相机光线计算中的幻数意义
EN

Computer Graphics用户
提问于 2021-03-06 15:47:16
回答 1查看 103关注 0票数 0

在第90行的小普特源中,方向乘以140,我想知道这个数字是从哪里来的。我希望它能在附加到源的幻灯片中得到解释,但是我找不到关于这个数字来自哪里的解释。

如果我增加这个数字(例如160.0 ),它就会产生某种奇怪的放大效果:

如果我将数字减少(在本例中为125.0),则会得到以下部分黑色图片:

据我所知,在我稍微简化了小点之后,在main函数中,我们在每个亚像素中得到一个随机点,这个点由-0.50.5之间的宽度/高度归一化,然后通过x和y轴乘以这些偏移量来计算新的射线方向,然后把所有的东西相加到一起,得到新的方向,如下所示:

代码语言:javascript
复制
fov_scale = 2.0 * tan(vertical_fov / 2.0)
cam_x_axis = vec3(aspect_ratio * fov_scale, 0, 0)
cam_y_axis = normalize(cross(cam_x_axis, cam_direction))

for x, y:
    for sx, sy, samps:
        // not using smallpt's tent filter
        x_in_subpixel = x + sx * 0.5 + erand48(Xi) * 0.5
        y_in_subpixel = y + sy * 0.5 + erand48(Xi) * 0.5
        // normalize them between -0.5 and 0.5
        new_x = x_in_subpixel / w - 0.5
        new_y = y_in_subpixel / h - 0.5

        offset_x = cam_x_axis * new_x
        offset_y = cam_y_axis * new_y
        new_direction = cam_direction + offset_x + offset_y
        // here we can see that magic number
        new_ray = ray(cam_position + new_direction * 140, normalize(new_direction))

所以我的问题是:

  • 这个数字是什么意思?
  • 我能否以编程的方式计算它是预期的(可能取决于视场、图像的宽度/高度)?
EN

回答 1

Computer Graphics用户

回答已采纳

发布于 2021-06-07 17:07:04

代码语言:javascript
复制
Sphere(1e5, Vec(50,40.8,-1e5+170), Vec(),Vec(),           DIFF),//Frnt

如果射线起源不向前移动,指数3的球体将与每一条射线相交。

您可以很容易地通过从亮度返回表面法线来验证这一点,而不改变光线的来源。(或者只是移除这个球体)。它还会看起来像摄像机后面的隧道;)

票数 0
EN
页面原文内容由Computer Graphics提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://computergraphics.stackexchange.com/questions/10717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档