Tutorial 6:Meshes
- 加载Mesh
- D3DXLoadMeshFromX
PIX Game Debugging Sample
- 使用PIX for windows来查看逐帧缓存、单步渲染等。
Basic HLSL
- 计算BoundingSphere
- LockVertexBuffer
- D3DXComputeBoundingSphere
- UnlockVertexBuffer
- Effect
- 加载:D3DXCreateEffectFromFile
- 设置属性:
- SetValue/SetTexture
- CloneMeshFVF
- D3DXComputeNormals
- 渲染:
- SetTechnique
- Begin
- BeginPass
- DrawSubset
- EndPass
- End
- 加载Texture
- D3DXCreateTextureFromFileEx
- 优化Mesh
- GenerateAdjacency
- OptimizeInplace
DXUT中的计算鼠标拖动模型旋转的方法
- 使用旋转四元数来记录摄像机朝向,在使用时转换为矩阵
- 将2D鼠标位移向量增加一个适配的z,使其成为单位3D向量,姑且称之为“屏幕朝向向量”
- 记录鼠标按下时的旋转四元数、屏幕朝向向量
- 计算移动后的屏幕朝向向量,与按下时的屏幕朝向向量比较,计算其变换的四元数,然后作用在按下时的旋转四元数上,得到并更新当前的旋转四元数
D3DXVECTOR3 vPart; float fDot = D3DXVec3Dot( &vFrom, &vTo ); D3DXVec3Cross( &vPart, &vFrom, &vTo ); return D3DXQUATERNION( vPart.x, vPart.y, vPart.z, fDot );
Text3D
- ID3DXFont
- 创建:D3DXCreateFont
- 渲染:DrawText
HLSL without Effect
- 创建VertexShader
- CreateVertexDeclaration/D3DVERTEXELEMENT9/LPD3DXCONSTANTTABLE
- GetBufferPointer/LPDIRECT3DVERTEXSHADER9
- D3DXCompileShaderFromFile
- CreateVertexShader
- 使用VertexShader
- SetVertexDeclaration
- SetVertexShader
UV atlas
- 使用DX自带的函数来对mesh生成一个优化了的纹理贴图
- D3DXUVAtlasCreate
Compiled Effect
- 在build的时候把fx文件编译为fxo文件,从而在运行期可以省略编译步骤
- D3DXCreateEffectFromFile的debugflag由visual studio的.NET的build配置来决定,不再传入
- 需要为每一个fx文件进行配置
- fxc.exe “%(FullPath)” /nologo /Zi /Tfx_2_0 /Fo”CompiledEffect.fxo”
Pick
- 使用DX进行pick
- 只能获取最近的交点
- 代码里把mesh重新clone了一遍使用新的进行计算,不太清楚什么用意,不知道是不是为了GPU和CPU更好的联合工作?CloneMeshFVF( D3DXMESH_MANAGED
- 函数:D3DXIntersect
- 使用几何手段检测三角形交点
- 目标是计算交点的uv(以两个三角形边向量为基)
- 方法是转换为矩阵及使用克莱姆法则
- 技巧是使用向量混合积来转化为向量运算
- 参考:http://www.cnblogs.com/graphics/archive/2010/08/09/1795348.html
Effect paramblock
- 控制单个Effect参数:param block
- 创建
- BeginParameterBlock
- SetValue/SetTexture/…
- EndParameterBlock
- 渲染
- ApplyParameterBlock
- 创建
- 控制共享的Effect参数:
- D3DXCreateEffectPool
- ID3DXEffectPool ( D3DXCreateEffectFromFile )
- fx中使用share关键字来修饰变量
- 在修改其中一个Effect的参数的时候,将会同时改变其他
- default值的获取
- D3DXLoadMeshFromX/D3DXEFFECTINSTANCE(pEffectFilename/NumDefaults/pDefaults)
- LPD3DXEFFECTDEFAULT(pParamName/Type/NumBytes/pValue)
- 使用:
- SetValue:GetParameterDesc
- SetTexture:pTextureFilename
Optimized Mesh
- 优化网格顶点
- ID3DX10Mesh::Optimize
- D3DXMESHOPT_ATTRSORT
- D3DXMESHOPT_VERTEXCACHE
- D3DXMESHOPT_STRIPREORDER
- ID3DX10Mesh::Optimize
- 优化网格索引
- D3DXConvertMeshSubsetToSingleStrip:转为单个三角形带
- D3DXConvertMeshSubsetToStrips:转为多个三角形带
Shadow map
- 流程
- 存储old render target
- 创建新的贴图与对应的render target
- 渲染 shadow map 到新的 render target
- 恢复旧的 render target
- 使用 shadow map 纹理作为参数来渲染场景
- 参考: