D3D9 Samples(2)--Vertices
2013-09-10 11:51
405 查看
D3D9 Samples(2)--Vertices
打开Tutorial 2: Vertices项目,先编译运行下项目,看看效果:
这个例子演示了基本的vertex buffer的使用。顶点缓冲用于保存场景中模型的顶点数据,除了位置信息,还可以包括颜色值,纹理坐标等。
1. 数据结构
struct CUSTOMVERTEX { FLOAT x, y, z,rhw; // The transformed position for the vertex DWORD color; // The vertex color }; #define CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
这是每个点的数据架构,包括x、y、z、rhw四个点就构成了一个D3DFVF_XYZRHW,表明已转换过的顶点。之所以需要rhw是由于经过顶点变换的点也是四个元素。此外还有一个color用于记录每个顶点的颜色
D3DFVF_CUSTOMVERTEX 定义了一个FVF,告知vertex buffer每个顶点的数据布局。建议使用vertex declaration,比FVF更灵活,一般shader都是使用declaration。
2. 初始化
2.1 初始化一个三角型的顶点数据
InitVBCUSTOMVERTEX Vertices
2.2 创建顶点缓冲区
IDirect3DDevice9::CreateVertexBuffer这里要说一个D3D9的内存池种类。有四种内存池:
D3DPOOL_DEFAULT
资源通常是保存在显存或AGP内存中,性能最高;但在D3D9设备丢失(lost)时要释放资源,并在设备重置(reset)时重新创建资源。
D3DPOOL_MANAGED
托管资源,资源也是存放在显存中的。但是D3D9会自动在系统内存中进行备份,所以在D3D9设备丢失时,D3D9会自动释放这些资源,并在设备重置时自动重建。所以用户无需释放和重建资源。
D3DPOOL_SYSTEMMEM
将资源存放在系统内存中,性能不高,但可以被D3D9读取并渲染。在D3D9设备丢失和重建时,无需对资源进行释放和重建。
D3DPOOL_SCRATCH
将资源存放在系统内存中,但是D3D9不能用这个资源进行渲染。在D3D9设备丢失和重建时,无需对资源进行释放和重建。
3. 渲染
3.1 设置源数据流,即上面创建的vertex buffer
IDirect3DDevice9:: SetStreamSource3.2 设置顶点布局,这里用的FVF
IDirect3DDevice9:: SetFVF如果前面使用的是vertex declaration。
IDirect3DDevice9:: SetVertexDeclaration
3.3 绘制几何体
IDirect3DDevice9:: DrawPrimitiveD3D中的几何模型都是由点、线、三角形组成。基本几何体分为 Point list、Line list、Line strip、Triangle list、Triangle strip、Triangle fan 几种。具体相见MSDN。
参考资料
http://msdn.microsoft.com/en-us/library/windows/desktop/bb206332(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/bb147291(v=vs.85).aspx
相关文章推荐
- D3D9 Samples(9)--BasicHLSL
- D3D9 Samples(10)--Text3D
- D3D9 Samples(11)--HLSLwithoutEffects
- D3D9 Samples(12)--CompiledEffect
- D3D9 Samples(1)--CreateDevice
- D3D9 Samples(14)--StateManager
- D3D9 Samples(3)--Matrices
- D3D9 Samples(15)--CustomUI
- D3D9 Samples(4)--Lights
- D3D9 Samples(16)--Pick
- D3D9 Samples(5)--Textures
- D3D9 Samples(6)--Meshes
- D3D9 Samples(7)--EmptyProject
- D3D9 Samples(8)--SimpleSample
- [转]samples about delegates
- Policy Injection Application Block Samples
- ACM UVa算法题209 Triangular Vertices的解法
- Code Samples from MS WebSite
- AjaxSamples.cn-为广大AJAX开发者提供支持和动力
- A Simple GPS Application Based on Microsoft.WindowsMobile.Samples.Location