【ACCESS精品源码栏目提醒】:网学会员,鉴于大家对ACCESS精品源码十分关注,论文会员在此为大家搜集整理了“VC++2010游戏开发随记之三十六 - 其它资料”一文,供大家参考学习!
游戏开发笔记三十六 浅墨 DirectX 提高班之四 顶【Visual C】点缓存的逆袭顶点永远是 3D 图形学中不可或缺的元素。
这篇文章里我们首先对 3D 世界里的一些概念和常识进行了阐述,然后详细剖析了顶点缓存相关的知识点,最后依旧是放出一个详细注释的顶点缓存绘制图形 Demo 的源代码将所学的知识融会贯通,并提供了源代码的下载。
一、引言在计算机所描绘的 3D 世界中,所有的物体模型(如树木,人物,山峦)都是通过多边形网格来逼近表示的,这些多边形可以是三角形,也可以是四边形。
所以我们这样说,多边形网格是构成物体模型的基本单元。
下面我们先来看一组图片 :哈哈,是不是被第一幅图萌到了呢?然后,是不是被第二幅图吓到了呢?然而,这就是事物的真相,真相往往是残酷的。
通过两幅图的对比我们可以明显地看到,这个可爱的萝莉模型其实是就是无数的三角形和四边形网格构成的。
首先我们用这些网格勾勒出了可爱萝莉的轮廓,然后在网格轮廓的表面“依附”上相应的图片。
这样,栩栩如生的萝莉模型就完成了。
三角形作为最简单的多边形,在 3D 世界中的地位显然不可小觑。
在 Direct3D 中,我们经常使用三角形来描述物体模型。
需要指出的是,任何物体都可以用三角形网格来逼近表示,三角形网格是构建物体模型的基本单元。
众所周知,一个三角形有三个顶点,为了能够通过大量的三角形组成三角形网格来描述物体,首先需要定义好三角形的顶点(Vertex),三个顶点确定一个三角形,而顶点除了定义每个顶点的坐标位置以外,还含有颜色等其他属性。
这样一说我们就可以发现,其实任何物体模型的最基本组成单元,其实是顶点。
这篇文章里,我们就来一起探究一下如何通过顶点的定义以及使用,玩转 Direct3D,随心所欲地绘制出简单的几何体。
二、顶点缓存使用四步曲Ⅰ.基础知识在 Direct3D 中,顶点的具体表现形式是顶点缓存(Vertex Buffer),顶点缓存保存了顶点数据的内存空间。
顶点缓存的存储位置比较随意,既可以在内存中,也可以在显卡的显存中。
我们前面已经给大家灌输了这样一个概念,所有物体都可以由三角形来表示。
这就表明了,如果想在 Direct3D 之中手动创建物体的话,就需要创建构成物体的所有顶点结构。
当Direct3D 绘制图形时,将根据这些顶点结构创建一个三角形列表,来描述物体的形状和轮廓。
为了讲解清楚顶点缓存的使用方法,下面我们来看这样一个例子:在图中,我们用四个顶点组成了一个正方形,这四个顶点分别是 v0v1v2v3 为了正确描述这个正方形,我们需要根据这四个顶点创建两个三角形△v0v1v2 和 △ v0v2v3,而这两个三角形的顶点数据,会依次保存在顶点缓存中。
下面我们就开始讲解在 Direct3D 中使用顶点缓存的具体步骤。
Ⅱ.顶点缓存使用四步曲之一:设计顶点缓存这一步的关键词是设计,Design。
如果我们要研发一部手机,首先要进行策划,做好设计图纸。
使用顶点缓存也是一样,想要使用顶点缓存绘制图形,第一步的工作就是对顶点的类型进行设计。
今天我们要介绍的一套顶点格式,是固定功能流水线中使用频繁的一套顶点定义格式——灵活顶点格式(FlexibleVertex Format,FVF)。
需要说明的是,与灵活顶点格式对应的是可编程渲染流水线中的“顶点声明”顶点定义套路,今天我们暂时先介绍灵活顶点格式这套定义套路。
灵活顶点格式(Flexible Vertex Format,FVF)来描述三角形网格的每个顶点。
灵活顶点格式可以让我们随心所欲地自定义其中所包含的顶点属性信息。
例如,指定顶点的三维坐标、颜色、顶点法线和纹理坐标等等。
创建自定义灵活顶点格式时,根据实际的需求,需要定义一个包含特定顶点信息的结构体。
主动权在我们这里,我们可以随心所欲地定义顶点包含的属性。
比如我们可以定义一个只包含顶点三维坐标和颜色的结构体。
cpp view plaincopyprint 1. struct CUSTOMVERTEX 2. 3. float x y z //顶点的三维坐标值,x,y,z 4. DWORD color //顶