光栅化设备空间的一个像素映射到屏幕空间的流程

光栅化设备坐标系(Raster space),范围(0,0)~(width,height)
→\to→标准化设备坐标系(NDC space),范围(0,0)~(1,1)
→\to→屏幕空间坐标系(Screen space),范围(-1,1)~(1,-1)
生成初始光线的代码如下

- x坐标:x + 0.5是
Raster space上第一个像素的中点,除以width,转到NDC space,再乘以2,减去1 转到Screen space - y坐标同理,但是要做个翻转
- scale = tan(FOV/2):作为一个缩放因子使用,以此达到控制我们能看到的场景的多少
- FOV = 90, scale = 1 : 正常视野、无缩放
- FOV > 90, scale > 1 : 视野大,应该看到场景中更多的场景,相当于把近平面拉大,但是采样光线数不变,发射出去的光线就稍微往四周散开,采样到更多的场景物体。
- imageAspectRatio:宽高比其实就是宽是高的多少倍,为了保证每个像素是正方形,对x轴进行拉长。由于1280x960,横轴的像素多于纵轴,那么横轴理应比纵轴长一些。
最后其实还要转到世界空间,但由于相机就在原点,看向-z,并且这个近平面就放在z = -1处。
因此方向就是简单的(x,y,z)-(0,0,0)
本文详细解释了光栅化过程中,如何将设备坐标系的像素映射到屏幕空间,涉及标准化设备坐标、视角缩放和屏幕适应等关键步骤。通过FOV调整和图像分辨率考虑,演示了如何生成初始光线并转换到世界空间。
5674

被折叠的 条评论
为什么被折叠?



