创建3D图形引擎(4) 摘要:
盲目地绘制成千的物体而没有执行任何的剪切,是导致在图形-渲染通道中时间延迟的一个主要原因。需要再次使用视锥以快速确定哪些物体位于视野中,为了确定哪些物体是可见的,可将每个三维物体包围到一个可见的球体中,称之为框界球体(bounding
sphere)。
下图演示了框界球体和视锥的运用,它展示了一个场景,其中有三个物体和一个视锥,每个网格模型都有一个可见的框界球体围绕着它。当一个球体位于构成视锥的6个平面前时,它就被认为是可见的。可以看出仅两个位于视锥中的物体是可见的,而另一个物体完全位于视锥外,绘制时能完全跳过那个位于视锥之外的物体。为了实现这一点,必须计算每个物体的框界球体,然后检测球体是否位于视锥之内。
创建3D图形引擎(3) 摘要:
在每帧中绘制所有的多边形是非常低效的,为了提高处理的速度,可以仅渲染那些位于视野内的多边形,同时应避免扫描场景中的每个多边形来确定哪些多边形是可见的。如果不每帧进行搜索,又如何知道哪些多边形是位于视野内呢?解决的方法就是将一个三维模型分解为一些较小的块(称为节点nodes),其容纳较少的多边形。然后将节点排列到一个特定的结构中(一棵树),以便进行快速搜索,并确定哪个节点是可见的,然后渲染这些可见的节点,通过使用视锥,可以找出哪些节点是可见的。取代搜索数千个多边形,通过搜索一个小小的节点集合,就能决定怎样进行绘制。节点树引擎适用于任何的网格模型,并将它拆分为节点,以便快速渲染网格模型(网格模型代表了游戏的层次)。
创建3D图形引擎(2) 摘要: 本篇是创建3D图形引擎(1)的续篇,3D图形引擎的代码以创建游戏内核中编写的代码为基础进行开发。
视锥(viewing frustum)是6个平面的集合,它从观察点向外扩展,以确定某个多边形是否能够被观察到。
首先,可以将视锥看作是一个以观察者开始扩展的金字塔。
创建3D图形引擎(1) 摘要:
使用单一的网格模型虽然可以同时渲染整个层次,但却意味着那些没有被看到的部分在通过渲染管道时会被裁剪掉,也就是说这样做会浪费时间。不要沮丧,因为使用一个单独的网格模型进行层次的渲染仍然有一些非常好的方法。比如说,在游戏世界中包括了单独的地牢,每个地牢包含不同的房间,所有的房间通过走廊连接到一起。其实,每个房间和走廊就是一个单独的网格模型,所要做的就是在游戏的处理过程中加载以及释放那些代表地牢房间的网格模型。