dx9相关有45个项目,可以从容易到困难学习,下面是我的学习总结,比较简单的就放在这篇里面,复杂的另起一篇,点击标题进入。
初级
Tutorial1-6
这个系列教材包括了dx的基础使用方法,对于除这6个教材以外的其它例子,都使用了一个框架DXUT
DXUT这个框架用起来很方便,学习dx某方面知识可以暂时不看DXUT框架的细节
EmptyProject
基本是个空架子,在D3DDeviceAcceptable中判断texture是否支持post pixel blending
PIXGameDebugging
http://blog.csdn.net/buck84/article/details/9101541
BasicHLSL
顾名思义,简单的HLSL使用,场景中包含了tiny和三个摄像机,hlsl计算的时候默认bAnimate=true,计算定点的时候随着时间的改变,定点位置沿着定点法向偏移
SimpleSample
只比EmptyProject复杂一点,包括界面显示和系统设置
Text3D
说明了3D程序里面文字的实现,文档中说文字渲染到bitmap,然后采用这个bitmap创建texture,这个是ID3DXFont::DrawText实现的
HLSLwithoutEffects
不适用effect,只使用hlsl要麻烦一点,使用Effect只需要D3DXCreateEffectFromFile,Set***,Begin BeginPass draw** EndPass End
只使用vertexshader需要D3DXCompileShaderFromFile CreateVertexShader,如果有很多歌vertexshader和pixelshader,管理起来就麻烦了
CompiledEffect
这个例子说的是使用预先编译好shader,节省程序启动时间,
CustomUI
界面
Pick
拾取算法
首先计算拾取射线在世界坐标中信息(顶点与方向)
然后计算射线与mesh相交情况,示例程序中采用了2种算法:
1)采用dx提供的函数D3DXIntersect
2)自己写算法
更多信息在 http://blog.csdn.net/buck84/article/details/9027967
中级
EffectParam
这个例子讲了effect的两种技术:sharing effect parameters和use parameter blocks to manage effect parameters。
sharing effect parameters采用effect pool来共享参数
use parameter blocks to manage effect parameters将多个参数合并,通过parameter block实现
EnhancedMesh
将mesh进行扩展,生成更精细的mesh
OptimizedMesh
优化mesh
StateManager
dx中state的管理
AntiAlias
借助学习这个例子,研究了一下游戏中坐标变换的详细原理,原理在http://blog.csdn.net/buck84/article/details/9203863
世界变换worldTransform和投影变化projectMatrix很普通,关键是viewTransform
三角形原始数据信息:
(0,1)1 (1,1)0
(0,0)2
渲染三角形的时候希望x轴朝右为正,y轴朝下为正,摄像机相当于:
pos:(w/2, h/2, z)其中z根据需求计算得出(h/2/tan(fovy/2))
dir:(0, 0, -1)
up:(0, -1, 0)
带入公式可以得出viewMatrix:
1
-1
-1
-w/2 h/2 z 1
Blobs
http://blog.csdn.net/buck84/article/details/9209587
MeshFromOBJ
这个例子说明从其它模型文件(.x以外的文件)导入数据并使用ID3DXMesh
PIX Plugin Sample
预留
HDRCubeMap
这个例子比较简单,包括2个内容:CubeMap和HDR。
CubeMap先生成一个CubeMap,然后将其作用到物体上实现各种特殊效果:如反射。
HDR则采用一个D3DFMT_A16B16G16R16F格式的纹理作为CubeMap的RenderTarget,保存超过1的结果,增强最终渲染场景的真实感
ParallaxOcclusionMapping
ConfigSystem
HDRPipeline
预留
ShadowMap
ShadowVolume
高级
localDeformablePRT