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产生的阴影有明显锯齿,所以此类会进行模糊
浙公网安备 33010602011771号