Stage3D程序结构解析

原文:http://blog.norbz.net/2012/01/stage3d-agal-from-scratch-part-ii-anatomy-of-a-stage3d-program/

翻译:D5Power
首发:AS部落(www.5aser.com)


 学习一个Stage3D程序的结构。相信我,这对以后的学习大有帮助。这样的结构也可以在WebGL或者其他面向低层的3D程序中见到。

  当我们使用面向底层的3D API时,我们有必要知道,硬件(我们的显卡,或者说我们的GPU)是如何工作的。

下面是一些关键词或者说是一些概念。 

GPU:图形处理单元,换句话说,您的显卡。或者,更确切的说,是您显卡上的图形处理核心
  V-RAM:图形处理内存,就是传说中的显存了。
  Buffer:在您的显存中分配好的内存空间
  Vertex:顶点,就是在你的3D空间中的点,例如,一个三角面需要3个顶点
        Indexes:索引,一个整数,定义了三角形的各个顶点在显卡中的渲染顺序。 
  Fragment:片段,暂时我们就说他是一个像素的颜色好了。
  Shader:着色器,着色器是一种程序,他有两种:顶点着色和片段着色,片段着色又可以称为像素着色
  Program:程序,顶点着色器和片段着色器的结合
      RAM-RamdomAccessMemory易挥发性随机存取存储器,高速存取,读写时间相等,且与地址无关,如计算机内存等。 
      ROM-Read Only Memory只读存储器。断电后信息不丢失,如计算机启动用的BIOS芯片。存取速度很低,(较RAM而言)且不能改写。由于不能改写信息,不能升级,现已很少使用。

现在,我们可以再回想一下:V-RAM是我们显卡上的显存,而Buffer(缓冲区)则是这些显存上已经为我们分配好的一些内存空间。为了渲染一个三角形,GPU需要一些Vertices(顶点,也就是3D空间中的一些点),以及一个告诉GPU如何渲染这些点的Program(程序)。

  流程图:


请注意流程图中的以下3个阶段:
  1.分配阶段:从显存中分配缓冲区(Buffer),用来存储各种渲染所必须的数据(顶点Vertices,贴图Texture,索引Indexes,程序Program)
  2.上传阶段:发送我们的数据到已经分配好的缓冲区里,让GPU可以随时使用他们
  3.声明阶段:为GPU下达渲染命令,告诉GPU使用哪个缓冲区里的哪些数据,然后GPU就可以渲染他们了

  第一和第二阶段(分配和上传)是Stage3D程序的本质,这个时候会花费CPU大量的时间与资源(相对来说,呵呵)来进行内存空间的分配和数据的上传。而一旦我们的数据上传到显存中,CPU就可以休息了,剩下的工作将交给GPU来做。这也是为什么Stage3D可以进行高效渲染的原因。而我们的CPU则可以抽空来做些其他事情,例如处理UI,处理网络数据。

  所有这三个阶段可以一次完成,在数据未发生变化的前提下,我们可以反复运行他们。

  在设置阶段,可以通过任何我们喜欢的顺序进行,例如,可以先创建顶点,然后创建索引,然后创建程序,也可以打乱他们的顺序,这都没有关系。当然,有一条顺序必须遵守,就是首先要创建好缓冲区(Buffer),然后才能把这些数据上传上去。在设置完成后,当我们调用drawTriangle方法来渲染三角形的时候,只要所有的数据都准备好就OK了,不管你是怎么准备的:)

  现在,我们已经清楚了一个Stage3D程序的运行顺序和结构。分配内存,向内存中传递数据,通知GPU开始渲染。。。准备工作做好了。。。

你可能感兴趣的:(Actionscript3.0)