Model:对XNA自带的Model类封装。此Model加载Xna的Model类,然后将内部的骨骼以及顶点、索引、Effect数据取出,加入到MeshRenderManager中。其Render()函数不进行渲染,仅仅更新RenderableMesh必要的数据(例如World矩阵)

 

Material:用于存储各类参数和贴图。以描述光照、贴图、法线贴图、空间位置等等信息

 

Texture:对XNA自带的Texture类封装,提供一些额外功能,包括使用SpriteBatch进行2D绘制

 

 

MeshRenderManager:产生RenderableMesh,并按照Material和Effect(Tech name)分类,减少调用Effect.Begin()的次数

 

RenderableMesh:真正负责渲染的类,包含了VertexBuffer、IndexBuffer、Material类、各种矩阵,在RenderMesh()更新Effect参数,然后调用Device渲染

 

MeshPerMaterialPerTechnique:包含MeshPerMaterial的列表

 

MeshPerMaterial:包含有相同Material的RenderableMesh的列表,在Render()中调用ShaderEffect.SetParametersOptimized(),将Material的参数传入到Shader

 

 

ShaderEffect类:实现了几种Shader效果的类,这些Shader都是单pass的(即不需要RenderToTexure),只有ShaderEffect的派生类才是多Pass的,主要职责是从外部接入参数,然后将参数传给Shader。另外为方便提供了static的Shader全局变量,使得可以在全局获取各种Shader类。

其中ShaderEffect.SetParametersOptimized()会根据Material是否重复来决定是否传参,减少不必要的参数更新。

 

RenderToTexture类:继承自Texture类,用于将画面渲染到一张贴图上。被其余多Pass的Shader所使用

 

VBScreenHelper类:产生覆盖全屏幕的一个正方形模型,用于多pass的Shader

 

ShadowMapShader类:继承自ShaderEffect类,用于渲染阴影。在ShadowMapShader类中调用PrepareShadow()将会渲染,包含两步:首先调用GenerateShadow,产生阴影深度图;然后调用RenderShadow,将深度图转换为阴影,渲染到会接收阴影的物体上

 

ShadowBlurShader类:由于ShadowMap产生的阴影有明显锯齿,所以此类会进行模糊


posted on 2009-03-23 13:57  中大信息中心数媒部  阅读(524)  评论(0)    收藏  举报