VC++2010游戏开发随记之四十三.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VC2010游戏开发随记之四十三

【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二) ?? 本篇文章里,我们首先对Direct3D之中固定功能流水线中的纹理映射相关的知识进行了详尽的剖析,然后我们将DirectInput这套游戏输入控制领域一手遮天的API用一个C++类进行了抽象和封装,这样之后我们用起来会显得非常便捷。希望在学习抽象和封装这套API的时候,大家能领悟到那些只能意会不可言传的宝贵编程思想。 ? 文章末尾依旧是提供文章配套详细注释的demo源代码的欣赏,并在文章末尾给出了源代码的下载地址。 ? ? ? 一、纹理映射知识回顾 ?因为这是纹理映射技术讲解的下半部分文章,且中间隔了一次在讲DirectInput,所以我们有必要把纹理映射知识再回顾一下。 首先我们来概括回顾一下《【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)》中讲过的知识点。 纹理是所有游戏中永恒的核心部分,无论是2D还是3D游戏。一言以蔽之,纹理映射是一种将2D图像映射到3D物体上的技术,可以让贴上纹理的表面展现出化腐朽为神奇的逼真显示效果。比如一块用砖块砌成的墙,更合适的做法是用简单的平面形状表面贴上砖块的纹理图像,而不是傻傻地用大量复杂的几何图形来模拟砖块坑洼的表面形态。纹理在计算机图形学中存在的意义就是模拟出复杂的表面图形和形状,而这种近乎逼真的模拟效果是单单用几何图形无法比拟的。通过这幅图可以非常容易地理解纹理映射的概念: ? 接着我们来复习一下《【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)》中讲到的核心知识点,使用纹理的四步曲: ?纹理映射使用四步曲,简明扼要20个字: 顶点的定义,顶点的访问,纹理的创建,纹理的启用。 ? 四步曲之一、顶点的定义。 FVF顶点格式的定义,最多八层纹理 四步曲之二、顶点的访问。 访问顶点缓存内容,纹理坐标的填充 四步曲之三、纹理的创建。 一个对象:IDIRECT3DTEXTURE9接口对象, 一个方法:D3DXCreateTextureFromFile方法 四步曲之四、纹理的启用。 一个方法:SetTexture方法 ? 复习完前置知识,下面我们就来看看本篇文章中的故事会有怎样的美好。 二、四大纹理过滤方式精讲 我们知道,当Direct3D渲染一个图元或者三维图形时,必须将它们通过坐标变换映射到二维屏幕之上。而当我们使用纹理来进行辅助渲染的时候,Direct3D就必须使用该纹理为二维图像上的每个像素进行着色。这里的每个像素都包含一个来自纹理的颜色值,而从纹理中为每个像素获取颜色的过程,就是所谓的纹理过滤(texture filtering)了。 ? 大多数情况下,屏幕显示的图形大小与纹理贴图大小是不同的。换句话说的话,这个纹理将被映射到一个比它大或者小的图元的图像上。这样纹理常常会被放大或者缩小。对纹理的放大会造成许多像素被映射到同一个纹理元素上,这样图形渲染的结果就会有色块的感觉。缩小一个纹理意味着一个像素被映射到许多纹理元素上,图形看上去会闪烁或者失真抑或是有锯齿。而为了解决这些问题,可以将相关纹理元素的颜色融合到一个像素之上,而如何将多个纹理元素的颜色融合到一个像素就取决于纹理过滤的方式了。 ? Direct3D中,有四种纹理过滤方式,他们分别是: ? 1.最近点采样过滤(nearst-pointsampling) ? 2.线性纹理过滤(lineartexture filtering) ? 3.各项异性过滤(anisotropictexture filtering) ? 4.多级渐进过滤(texturefiltering with mipmaps) ? 这纹理过滤的“四大天王”各有优缺点。比如,线性过滤生成的图像较糙,但是计算量小。多级渐进纹理过滤的效果通常最好,特别是和各向异性过滤联合使用的时候效果更佳。但是它占有的资源最多,计算量也最大。 设置纹理过滤方式通常都是用IDirect3DDevice9::SetSamplerState函数,这个函数用于设置纹理的各种采样属性,下面我们来讲下一这个函数: ? [cpp]?view plaincopyprint? HRESULT?SetSamplerState(?? ?[in]??DWORD?Sampler,?? ?[in]??D3DSAMPLERSTATETYPE?Type,?? ?[in]??DWORD?Value?? );?? ■ 第一个参数,DWORD类型的Sampler,指定为哪一层纹理设置采样状态,在Direct3D中支持最多8层纹理,所以这个值取值显然

文档评论(0)

zilaiye + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档