我正在为3D场景在C++中创建一个光模拟器(现在是一个“康奈尔盒”)。这是我正在做的一个图形课程的项目,我不想让它变得更快,仅仅渲染一个像样的图像对我来说是很好的,即使它需要几个小时。我想展示全局照明和自由度。
光线不是普通的射线追踪器,而是从点光源发出的,在场景中以几何形状反射,最终击中光传感器,这是三维环境中的一个矩形,取决于光线到达传感器的位置,屏幕上的那个像素的强度会增加。
在传感器和场景之间,有一个镜头,我寻求设计和正确的位置,以模拟相机。透镜也是一个平面,但是法线(当光线击中透镜并被折射时)是根据一个薄的球面透镜来计算的。
我现在的设置是从我在维基百科上找到的镜片公式中得到的:
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
所看到的主要是点光源,没有聚焦。
理想情况下,我希望大约一半的盒子(在-.5和.5之间的z)能够聚焦,这样自由度就可以显示出来。我的问题是:如何校准传感器和镜头以使图像出现?我不认为我能把镜头和传感器弄得太小,然后几乎所有的射线都会被丢弃,因为它们不会击中相机,从而使绘制在计算上不可行。
发布于 2013-07-26 15:17:02
我想你要问的是:把相机放在哪里?如果你知道你的镜头的焦距(也就是镜头后面的距离,它会聚焦平行入射的光线),那么你就可以很简单的了解镜头的视场,并将镜头放置在正确的画面上。这就是你要问的吗?
如果是这样的话,计算出那个交叉口的距离,其余的就会就位。
https://stackoverflow.com/questions/17812099
复制相似问题