INFINITY
INFINITY
一个代表“实践性无穷大”的巨大浮点数常量(通常为 1e6),用于在算法中表示无限距离、范围或作为初始最大值,同时保证数值计算的稳定性。
核心优势
它为“无穷”概念提供了一个统一、稳定且可读性高的标准,避免了在代码中散落不一致的“魔法数字”,并规避了使用真正数学无穷(INF)可能导致的 NaN(非数字)等计算陷阱。
常见用途
算法初始化:在光线追踪等搜索算法中,用作“至今为止找到的最远距离”的初始值。
无限范围表示:为平行光等概念上无限远的光源设置一个有效的、巨大的范围值。
相机远平面:作为相机远裁剪平面的一个合理的默认值,以防止过早地裁剪掉远景物体。
GPGPU 算法:在 GPU 实现的最短路径等算法中,用作未访问节点的初始距离。
如何调整
INFINITY 是一个编译时常量,其值的选择是“范围”与“深度精度”的权衡。值太大(如 1e10)会严重降低深度缓冲区的精度,导致Z-Fighting(深度冲突);值太小(如 1e4)则会过早地裁剪掉远处的物体。默认值 1e6 是在保证大场景渲染范围和维持足够深度精度之间的实用平衡点。
代码示例
1// 在光线追踪算法中,初始化最近交点距离为一个极大值
2let minDistance = TSL.INFINITY;
3
4// ... 在循环中,如果发现更近的交点则更新
5if ( newHitDistance < minDistance ) {
6 minDistance = newHitDistance;
7}