由于美术场景有限制,所以需要将摄像机限制在一个如下图所示的凸六面体内:
那八个顶点的位置根据场景不同而不同,限制摄像机位置的关键在于判定摄像机位置是否在六面体内。而剩下的就是几何知识了。
首先要求出6个平面的方程,取一个平面的三个顶点 V1, V2, V3,分别代入平面方程:
aX+ bY + cZ +d = 0 中然后求出:
1 2 3 4 5 6 7 |
a = v1.y * v2.z - v1.y * v3.z -v2.y * v1.z + v2.y * v3.z + v3.y * v1.z - v3.y * v2.z; b = -v1.x * v2.z + v1.x * v3.z + v2.x * v1.z - v2.x * v3.z - v3.x * v1.z + v3.x * v2.z; c = v1.x * v2.y - v1.x * v3.y - v2.x * v1.y + v2.x * v3.y + v3.x * v1.y - v3.x * v2.y; d = -v1.x * v2.y * v3.z + v1.x * v3.y * v2.z + v2.x * v1.y * v3.z - v2.x * v3.y * v1.z - v3.x * v1.y * v2.z + v3.x * v2.y * v1.z; |
取一个六面体内的点V0,代入方程中,得出:
P0 = a * V0.x + b * V0.y + c * V0.z + d 。
设待验证的摄像机位置为Vx,同样代入,得出:
Px = a * Vx.x + b * Vx.y + c * Vx.z + d 。
然后对比P0和Px的正负号,如果相同,则证明V0和Vx在同侧。
按照以上算法,验证P0和Px是否同时满足在六个面同侧,是,则说明摄像机在六面体内,否则在六面体外。