我研究过视锥体剔除,大多数解决方案提供了在网格物体上找到边界框的方法。我的观点不是网格,没有大小,它只是3D世界空间中的一个坐标。目标不是为了减轻图形处理,而是简单地找出世界空间中的一个点是否在相机的视野内。
这是我用于计算平截头体平面的代码,取自http://www.richardssoftware.net/2013/08/hardware-instancing-and-frustum-culling.html
public Frustum(Matrix vp)
{
_frustum = new[] {
//left
new Plane(vp.M14 + vp.M11, vp.M24 + vp.M21, vp.M34 + vp.M31, vp.M44 + vp.M41),
// right
new Plane(vp.M14 - vp.M11, vp.M24 - vp.M21, vp.M34 - vp.M31, vp.M44 - vp.M41),
// bottom
new Plane(vp.M14 + vp.M12, vp.M24 + vp.M22, vp.M34 + vp.M32, vp.M44 + vp.M42),
// top
new Plane(vp.M14 - vp.M12, vp.M24 - vp.M22, vp.M34 - vp.M32, vp.M44 - vp.M42),
//near
new Plane(vp.M13, vp.M23, vp.M33, vp.M43),
//far
new Plane(vp.M14 - vp.M13, vp.M24 - vp.M23, vp.M34 - vp.M33, vp.M44 - vp.M43)
};
foreach (var plane in Planes)
{
plane.Normalize();
}
}
使用这些平面以及Vector3或Matrix,如何判断一个点是否在摄影机视图中?