网站大量收购闲置独家精品文档,联系QQ:2885784924

VC++2010游戏开发随记之三十六.doc

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC2010游戏开发随记之三十六

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

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档