礼拜一-礼拜五:09.00 早上-06.00 下午

企业文化

视野平面怎样快速排除整个包围盒:状态推演第19例

2026-11-12

绘制前可以用多个半空间包围相机视野。若一个物体的整个轴对齐包围盒都位于其中某个平面外侧,它就肯定无需绘制;但没有被排除也不等于它一定可见。

先把规则写清楚

本例视野以六个不等式定义,每个平面满足n点乘位置加d不小于零。对包围盒,按法线分量正负选择坐标上下界,分别计算该表达式的最小值和最大值。某平面最大值小于零就排除;所有平面最小值均非负则全在内部。

本例输入与推演结果

六平面系数依次为[[1, 0, 1, 0], [-1, 0, 1, 0], [0, 1, 1, 0], [0, -1, 1, 0], [0, 0, 1, -4], [0, 0, -1, 19]],每项前三个数为法线,第四个为常数;盒子记录下界与上界。

包围盒 | 六平面表达式范围 | 判定 [[-2, 3, -2], [4, 4, 7]] | [[-4, 11], [-6, 9], [1, 11], [-6, 4], [-6, 3], [12, 21]] | 待进一步检查 [[-18, 2, 21], [-10, 10, 30]] | [[3, 20], [31, 48], [23, 40], [11, 28], [17, 26], [-11, -2]] | 排除 [[11, 0, 22], [19, 8, 28]] | [[33, 47], [3, 17], [22, 36], [14, 28], [18, 24], [-9, -3]] | 排除 [[-18, -12, 1], [-9, -10, 4]] | [[-17, -5], [10, 22], [-11, -6], [11, 16], [-3, 0], [15, 18]] | 排除 [[-13, -7, 21], [-10, -4, 29]] | [[8, 19], [31, 42], [14, 25], [25, 36], [17, 25], [-10, -2]] | 排除 [[-1, 12, 10], [8, 19, 12]] | [[9, 20], [2, 13], [22, 31], [-9, 0], [6, 8], [7, 9]] | 待进一步检查 [[-16, -6, -5], [-7, 1, -3]] | [[-21, -10], [2, 13], [-11, -2], [-6, 3], [-9, -7], [22, 24]] | 排除 [[0, -14, 3], [1, -12, 5]] | [[3, 6], [2, 5], [-11, -7], [15, 19], [-1, 1], [14, 16]] | 排除

这里的编号只用来辨认本例中的对象,不能当成另一份记录里的固定身份。阅读表格时先找到输入,再顺着运算顺序对照输出;空列表、零值和不存在的结果有不同含义,不能混用。表中分数保留精确值,小数显示仅为阅读方便。

怎样自己复核

剩下的情况只标为待进一步检查。平面测试是保守的:包围盒可能同时跨过若干边界,逐平面没有完全外侧仍可能与实际视野不相交。边界等于零算接触,不在这一阶段丢弃。

可以逐个枚举包围盒的八个角,核对每个平面的最小值和最大值。不要仅测试盒子中心,中心在外不表示整个物体在外;也不要把待检查状态直接改成不可见,否则贴着视野边缘的大物体可能突然消失。

适用范围

这里的视野是显式定义的截头锥体,坐标和不等式约定都写在输入中,不依赖某个图形接口的矩阵排列。测试只依据包围盒,不考虑遮挡、物体内部空洞、透明度或屏幕上是否只占很少像素。

本例是一套可复现的游戏机制练习,不依赖具体品牌或某个软件的默认设置。修改任何边界约定、输入参数或操作顺序后,应重新推演并保存中间状态。发现差异时先定位第一处不一致,再判断是规则不同还是计算错误,不要只把最终答案调整到看起来相同。