可视性问题
光线追踪需要消耗更多的内存和时间,但是相比栅格化的模拟效果更好,而在如今计算机硬件发展后,几乎所有非实时渲染器都采用光线追踪技术,或者采用混合技术.
如何用栅格化解决可视性问题:如何做到?
从屏幕空间转换到标准化设备坐标空间-NDC(normalized device Coordinates),再转换到栅格化坐标.
- 所有的点最初定义的坐标系是屏幕空间(screen space),由位于画布中心的原点定义.坐标系所有的轴都是单位长度的,因此坐标可能为负数——如果该点位于画布左侧.
- 栅格空间(raster space)是用像素网格来定义坐标系的。其坐标原点位于左上角,其一个像素点为一个单位长度,所以其实际画布大小由图片的宽高决定。
转换方法如下:
- 由于在栅格空间的坐标都为正数,所以需要先把P点的原始坐标标准化。即将它们的坐标转换为0-1范围内,这时候我们称它们转换到了NDC空间中,这样再转换到栅格空间就很简单了。
- 当转换到NDC空间后,将标准化后的坐标乘以图像的大小,并将结果取整。
原始坐标中P点的范围取决于屏幕空间中画布的大小,但是为了简便,我们假设画布的大小为[-1,1],下面是伪代码
int width = 64, height = 64; // dime