第四章 基本图元_第1页
第四章 基本图元_第2页
第四章 基本图元_第3页
第四章 基本图元_第4页
第四章 基本图元_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 基本图元主讲:苏振扬 4.1 Direct3D坐标系 4.2 Direct3D基本图元 4.3 Direct3D颜色表示 4.4 使用顶点缓存绘制图形4.1 Direct3D坐标系 在空间几何中,绝大多数情况下使用笛卡尔坐标系为参照系表示图形,表示二维图形时使用二维笛卡尔坐标系,三维图形使用三维笛卡尔坐标系。4.1 Direct3D坐标系 二维笛卡尔坐标系4.1 Direct3D坐标系 三维笛卡尔坐标系 4.2 Direct3D基本图元 图元是Direct3D中定义的基本图形表示形式。 Direct3D定义了六种基本图元。顶点集合、线段集合、线段条带、三角形集合、三角形条带、三角扇形顶

2、点集合线段集合4.2 Direct3D基本图元线段条带三角形集合三角形条带三角扇形4.2 Direct3D基本图元 基于渲染效率的考虑, Direct3D使用三角形来构成大多数其他多边形,这是因为三角形的三个顶点肯定是共面的,而渲染不共面的顶点效率比较低。4.3 Direct3D颜色表示 在Direct3D中,颜色用RGB三元组表示。RGB数据可用以下三种结构表示: D3DCOLOR D3DCOLORVALUE D3DXCOLOR4.3 Direct3D颜色表示 一、D3DCOLOR它实际上与DWORD类型完全相同(由关键字typedef定义) Typedef DWORD D3DCOLORAl

3、pha红绿蓝32bits4.3 Direct3D颜色表示 一、D3DCOLOR指定:要指定每个颜色分量的值,并将其插入到D3DCOLOR类型的恰当位置上,需要借助位运算。 Direct3D提供了宏D3DCOLOR_ARGB帮助我们完成这样的工作。D3DCOLOR red= D3DCOLOR_ARGB(255,255,0,0)D3DCOLOR someColor= D3DCOLOR_ARGB(255,144,34,25)4.3 Direct3D颜色表示 一、D3DCOLOR指定:类似的宏还有D3DCOLOR_RGBA和D3DCOLOR_XRGB.#define D3DCOLOR_RGBA(r,g

4、,b,a) D3DCOLOR_ARGB (a,r,g,b) #define D3DCOLOR_XRGB (r,g,b) D3DCOLOR_ARGB (0 xff,r,g,b) 有时,直接使用DWORD类型变量表示颜色。4.3 Direct3D颜色表示 二、D3DCOLORVALUETypedef struct D3DCOLORVALUEfloat r;float g;folat b;float a; D3DCOLORVALUE4.3 Direct3D颜色表示 三、D3DXCOLOR和D3DCOLORVALUE数据成员相同,此外还提供了一组构造函数和运算符重载函数,方便了颜色的运算。D3DCOL

5、ORVALUE和D3DXCOLOR可以互换。4.4 使用顶点缓存绘制图形 顶点是3D几何学中的基本元素,顶点缓存是一个包含顶点数据的连续内存空间,类似的,索引缓存是一个包含索引数据的连续内存空间。 之所以使用顶点缓存和索引缓存而非数组来存储数据,是因为顶点缓存和索引缓存可以被放置在显存中。进行绘制时,使用显存中的数据将获得比使用系统内存中的数据快得多的绘制速度。4.4 使用顶点缓存绘制图形 一、顶点结构和顶点格式在程序中,描述三角形单元时,我们需要指定该三角形单元3个顶点的位置。而描述物体时,我们需要指定构成该物体的三角形单元列表。在Direct3D背景下,顶点可以包含很多属性:位置坐标、颜色

6、、法线、纹理坐标等。4.4 使用顶点缓存绘制图形 一、顶点结构和顶点格式Direct3D赋予我们自行定义顶点格式的自由,即允许我们定义顶点的各分量。 首先,需要创建一个结构体表示顶点。struct ColorVertexD3DXVECTOR3 position;D3DXVECTOR3normal;其次要用灵活顶点格式标记的组合来描述顶点的组织结构。4.4 使用顶点缓存绘制图形一、顶点结构和顶点格式struct Vertexfloat _x, _y, _z; float _nx, _ny, _nz; float _u, _v; 其顶点格式为:D3DFVF_XYZ|D3DFVF_NORMAL|D3

7、DFVF_TEX14.4 使用顶点缓存绘制图形 一、顶点结构和顶点格式注:1.程序中为使用方便,常使用宏定义灵活顶点格式。2.灵活顶点格式标记的顺序必须与顶点结构中相应类型数据定义的顺序保持一致。4.4 使用顶点缓存绘制图形 二、内存池类型在Direct3D中,需要用到多种资源,例如顶点缓存、索引缓存、纹理等。资源位于哪种内存中,对于程序的性能和代码编写都有重要的影响。 Direct3D使用D3DPOOL枚举表示各种内存池类型。D3DPOOL_DEFAULTD3DPOOL_MANAGEDD3DPOOL_SYSTEMMEMD3DPOOL_SCRATCH4.4 使用顶点缓存绘制图形 二、内存池类型

8、1. D3DPOOL_DEFAULT默认值。该类型内存值指示Direct3D将资源放入最适合该资源类型及其使用方式的存储区中。调用IDirect3DDevice9:Reset之前,必须对默认内存池中的资源销毁或释放。2. D3DPOOL_MANAGED放入该托管内存池中的资源将交由Direct3D管理。建议使用。3. D3DPOOL_SYSTEMMEM资源放入系统内存4. D3DPOOL_SCRATCH位于临时内存中,不直接用于渲染操作,只能进行内存加锁、复制等操作。4.4 使用顶点缓存绘制图形 三、创建顶点缓存创建顶点缓存的前期工作: 1.定义表示顶点的结构 2.定义描述顶点格式的FVF 3

9、.保存顶点数据的结构数组4.4 使用顶点缓存绘制图形 三、创建顶点缓存使用IDirect3DDevice9接口的CreateVertexBuffer()方法创建顶点缓存。g_pd3dDevice-CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX), D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &g_pVB, 0); 相当于D3DFVF_XYZRHW|D3DFVF_DIFFUSE4.4 使用顶点缓存绘制图形 三、创建顶点缓存为了访问顶点缓存中的数据,我们需要获得指向缓存内部存储区的

10、指针,可以借助方法Lock来获取指向缓存内容的指针。IDirect3DVertexBuffer9:Lock()4.4 使用顶点缓存绘制图形 三、创建顶点缓存OffToLock自缓存的起始点到开始锁定的位置的偏移量,单位为字节。SizeToLock所要锁定的字节数。ppbData指向被锁定的存储区起始位置的指针。Flags表示顶点缓存的加锁属性,可取默认值0.4.4 使用顶点缓存绘制图形 三、创建顶点缓存缓存区SizeToLockOffToLockOffToLock+ SizeToLock4.4 使用顶点缓存绘制图形 三、创建顶点缓存1. VOID* pVertices; g_pVB-Lock(

11、 0, sizeof(vertices), (void*)&pVertices, 0 )2. VOID* pVertices; g_pVB-Lock( 0, 0, (void*)&pVertices, 0 )当前两个参数为0时,表示锁定整个缓存。 4.4 使用顶点缓存绘制图形 三、创建顶点缓存得到内存地址后,便可对内存进行操作。memcpy( pVertices, vertices, sizeof(vertices) ); 另一种赋值方式:Vertex* vertices;-Lock(0, 0, (void*)&vertices, 0);vertices0 = Vertex(-1.0f, 0.0f, 2.0f);/定义顶点数据vertices1 = Vertex( 0.0f, 1.0f, 2.0f);vertices2 = Vertex( 1.0f, 0.0f, 2.0f);Triangle-Unlock();4.4 使用顶点缓存绘制图形 四、渲染顶点缓存g_pd3dDevice-SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );g_pd3dDevice-SetFVF( D3DFVF_XYZRHW|D3DFVF_DIFFUSE );g_pd3dDevice-DrawPrimit

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论