我正在用C ++为3D场景创建一个光模拟器(现在是“康奈尔盒子”)。这是一个我正在做的图形课程的项目,我不想让它快速,只是为了渲染一个体面的图像是好的,即使它需要几个小时。我想演示全局照明和DOF。
光线不是常规光线追踪器,而是从点光源发出,在场景中的几何体上反弹,最终击中光线传感器,这是3D环境中的一个矩形,并取决于光线射到的位置。传感器,屏幕上该像素的强度会增加。
在传感器和场景之间,有一个镜头,我试图设计和正确定位,以模拟相机。镜头也是一个平面,但是法线(当光线撞击镜头并被折射时)是根据一个薄的球面镜头计算的。
我当前的设置,源自维基百科上发现的镜头公式:
The Cornell box: x, y and z in between -1 and 1
Sensor dimensions: 0.2 x 0.2 (too large?)
Sensor position: 0, 0, -2.9
Sensor resolution: ~ 150 x 150 px
Lens dimensions: 0.4 x 0.4 (rectangular shape for now, spherical normals)
Lens position: sensor position + (0, 0, 0.1037) (in front of sensor)
Lens IOR: 1.52 (glass)
Lens focal length: 0.1
Lens radius: 0.104
所见所见的主要是点光源,未聚焦。
理想情况下,我希望大约一半的方框(z在-.5和.5之间)被聚焦,这样DOF就可以看到了。 我的问题是:如何校准传感器和镜头以显示图像?我认为我不能使镜头和传感器太小,然后几乎所有的光线都会被丢弃,因为它们不会碰到相机,从而使渲染在计算上变得不可行。
答案 0 :(得分:0)
我觉得你问的是:把镜头放在哪里?如果您知道镜头的焦距(也就是镜头后面的距离会聚焦平行的入射光线),那么就可以直接了解视野并放置相机以使场景正确构图。这就是你问的问题吗?
如果是这样,计算交叉点距离,其余部分将落实到位。