1

我正在用 C++ 为 3D 场景创建一个灯光模拟器(现在是“康奈尔盒子”)。这是我正在做的图形课程的一个项目,我并不寻求让它快速,只是渲染一个像样的图像对我来说很好,即使它需要几个小时。我想演示全局照明和自由度。

光线不是常规的光线追踪器,而是从点光源发出,在场景中的几何体上反弹并最终撞击光传感器,这是 3D 环境中的一个矩形,并且根据光线撞击传感器的位置,屏幕上该像素的强度会增加。

在传感器和场景之间,有一个镜头,我试图设计和正确定位以模拟相机。透镜也是一个平面,但法线(当光线撞击透镜并被折射时)是根据一个薄的球面透镜计算的。

我目前的设置,它来自镜头公式,我在 Wikipedia 上找到了这样的公式:

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。我的问题是:如何校准传感器和镜头以显示图像?我不认为我可以将镜头和传感器做得太小,然后几乎所有的光线都将被丢弃,因为它们不会击中相机,从而使渲染在计算上不可行。

4

1 回答 1

0

我想你要问的是:把相机放在哪里?如果您知道镜头的焦距(即镜头后面将平行入射光线聚焦的距离),那么就很容易知道视场并放置相机以正确构图。你问的是这个吗?

如果是这样,请计算该相交距离,其余的将就位。

于 2013-07-26T15:17:02.957 回答