DisplayList与OpenGL

OpenGL —- Display List

      1. Why do we use it?

使用display list可以提高OpenGL在绘图过程中的性能。它预先将要执行的OpenGL的命令存储在内存中间,当后面有调用时候,直接提取内存中的数据,这样可以很大程度上的缩短计算的时间。尤其是在需要多次重复绘制同一几何模型的时候,性能的提高特别明显。

       那display list执行的机制是怎样的呢?考虑我们要绘制一辆汽车,四个轮子具有几何上的一致性,如果我们不使用Display List绘制,对于每一个轮子,我们需要由半径大小计算整个轮子的几何模型,然后绘制,同样的计算要出现在四个轮子的绘制当中。如果使用Display List,由生成Display List的过程进行一次计算,并将这些结果存储在存储器中间。因此在四个轮子可以通过调用Display List来完成,此时需要做一些几何的变换,而这个过程省略了由半径计算轮子上点的几何位置的过程,因为这个过程在生产Display List的时候已经完成。这样就可以大大提高性能。

       因此,使用Display List来存储,可以提高OpenGL绘制性能。需要多次使用的命令,可以生产一个Display List来重复使用。

      1. How to use it?

生产Display List

       DispList = glGenLists(1);

      

glNewList(DispList, GL_COMPILE);

       ….OpenGL Commands

       glEndList();

 

 

 

调用Display List

       Void display()

{

       …  

              glCallList(DispList);

              …

}

       Display List 相关函数:

              “glCallLists” , “glDeleteLists” , “glGenLists” , “glNewList”

      1. What is the limitation of using Display List?

       虽然Display List可以提高绘制的性能,当其使用也有一点的限制。首先,由于其是计算结果存储在存储器中,使用Display List时直接到调用这个存储器中的值。因此如果里面的相对位置需要改变,需要重新生成Display List。如前文中如果左后车胎爆胎了,那就不能用同样的Display List来绘制这个左后车胎,需要重新为其生成适当的几何数据。

另外一个是这个性能的提高也有一定的相对性,需要在内存空间和CPU的速度之间做一个合理的均衡。正如文中提到的Display List是将计算结果存放在存储器中,如果需要绘制的物体计算不复杂,但是又很多三维点需要保存,这样将需要大量的内存去保存三维数据。笔者当时在使用Display List过程中计算机显示内存使用量高达1G,最后迫不得已放弃使用Display List而使用直接绘制过程。

 

转自:http://blog.donews.com/Shangshu/archive/2005/03/27/314140.aspx

你可能感兴趣的:(DisplayList与OpenGL)