本文主要是介绍光线追踪-初始光线发射方向(Raster space、NDC space、Screen Space),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
光栅化设备空间的一个像素映射到屏幕空间的流程
光栅化设备坐标系(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)
这篇关于光线追踪-初始光线发射方向(Raster space、NDC space、Screen Space)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!