DX Sample阅读笔记

这篇博客详细记录了DX Sample的学习过程,包括加载Mesh、使用PIX进行游戏调试、基础HLSL编程、Text3D实现、无Effect的HLSL、UV Atlas、编译Effect、拾取操作、Effect参数块管理、优化Mesh以及阴影映射技术的运用。内容涵盖了从基本概念到高级技术的实践应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
  • 使用几何手段检测三角形交点

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
  • 优化网格索引
    • D3DXConvertMeshSubsetToSingleStrip:转为单个三角形带
    • D3DXConvertMeshSubsetToStrips:转为多个三角形带

Shadow map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值