3D引擎中的面性能优化

在3D引擎中,影响到性能的主要是材质和面,大量的高分辨率的高色彩的材质十分占用内存,而大量的面会影响CPU的计算速度。
这一次只讨论如何来削减面数。

看到很多朋友削减面数的方式都是从模型身上下手,削减多余的面,看不见的面。那么即使如此,如果这个模型需要旋转,那么模型的背后的面肯定不能剔除。
那么,这时候就可以考虑从3D引擎的底层渲染机制下手了。

才3D引擎中,摄像机捕捉的画面实际上是由一个 近截面 和 一个 远截面 构成的一个多边形,所有近于近截面的物体不渲染,所有远与远截面的物体不渲染。 因此,从此部开始就可以把视野外的物体全部移除, 但这还不够。

我们为什么不能把,即使在视野内,但是此刻看不到的面也移除呢?

摄像机的本质就是向量,而 向量 * 顶点 有这么一个性质:
1。 当向量 U 和 顶点 V 的夹角为 90°时, 他们的乘积为0
2。 当向量 U 和 顶点 V 的夹角大于 90°时,乘积<0 3。 当向量 U 和 顶点 V 的夹角小于 90°时,乘积>0

那么对于一个立方体(8个顶点) 可以做如下判断,来知道哪个顶点是可视的
[cc lang=”actionscript3″ nowrap=”false”]
var viewList : Vector. = new Vector.();
for each(var v : Point3D in Cube)
{
if(v * u > 0) viewList.push(v);
}
[/cc]
当取得所有可见顶点后,就可以把他们关联的面推入待渲染列表了。

而对于一个处于临界区域的多边形来说,上面的方式是不够的。 那么可以以该多边形的中心点为圆心,最远顶点长度为半径构建一个球体。然后判断该球体是否与 近截面 和 远截面 构成的多边形相交,如果不相交,则整个多边形完全不渲染。
对于相交区域再次采用上面的向量算法来判断。

发表评论

电子邮件地址不会被公开。 必填项已用*标注