上一页 1 ··· 57 58 59 60 61 62 63 64 65 ··· 94 下一页
摘要: 通常会多次要在3D场景中显示大量的细节。例如,混凝土上的裂纹,或粗糙墙面的凸凹不平之处。也许并不总是想在纹理图像自身包含这种细节。通常,一些彩色图纹理虽然从远处看的时候它们很好,但靠近看时,也许会让观察者觉得有些模糊。使用一种名为细节映射的技术有助于解决这些问题,或至少得到改善。细节图是一个灰度图,保存小而精确的细节内容。当将其和颜色图一起施加到表面上时,最终的图像看上去原始图像好像有更多的细节。同样,使用细节图时,颜色图在从上靠近看时,看上去不模糊。使用细节图为表面增加细节,给图增加小的裂纹以及线条,这样可以提高表面的真实感。对墙和类似表面更是如此。细节映射的演示成名为DetailMappi 阅读全文
posted @ 2011-09-05 14:13 小 楼 一 夜 听 春 雨 阅读(348) 评论(0) 推荐(0)
摘要: 为3D场景增加雾会得到更真实的渲染效果。雾可以增加大量真实感,尤其对地形、树林地区以及幽灵般的户外背景。同样,雾可以很好地限制观察者对环境的可见度。现实中并不存在无限的视觉距离。事实上,这就是虚拟环境的一个镜像。通过限制观察距离,同样可以限制发送给管道的多边形数目。这对于提高渲染时间更有用。如果读者还记得PS游戏机上的第一个游戏《寂静岭》(Silient Hill),该游戏物景中有许多雾,很难看到外面的事物,除非是事物就在游戏玩家的面前,就可以很清楚地了解这一点。Direct3D中有两类硬件雾可用:顶点雾和像素雾。顶点雾是按照每个顶点来计算雾的数据,而像素雾根据像素级别计算雾的数据。由于通常像 阅读全文
posted @ 2011-09-04 22:54 小 楼 一 夜 听 春 雨 阅读(1798) 评论(1) 推荐(0)
摘要: 1 多采样 (抗锯齿)全景抗混叠是一种减少在渲染多边形的边时所产生的参差不齐效果的方法。抗混叠物体也会对渲染后的整个场景产生负面影响,尤其是处理动画更是如此。通过实现对像素的本地模糊处理,并在屏幕上显示出一个平均结果而实现全景抗混叠。在Direct3D中启用多采样将实现程序中的抗混叠。多采样将对程序性能的影响很大。这种性能影响取决于所选的样本数,所以在考虑更多的样本数时,一定要牢记这一点。采样数越高,渲染的场景质量就越好。样本最大数取决于支持它的硬件。某些硬件根本不支持多采样,而有一些硬件也许可以支持多大4倍速率的采样,还有一些可以支持8倍速率或更高的采样率。在Direct3D 9.0中,多采 阅读全文
posted @ 2011-09-04 21:40 小 楼 一 夜 听 春 雨 阅读(2126) 评论(0) 推荐(0)
摘要: main.h头文件包含了用于GUI系统和控件的define语句。这里将在游戏源文件中添加3个新函数,它们分别是InitializeMainMenu()、MainMenuCallback()和MainMenuRender()。其中InitializeMainMenu()由GameInitialize()函数调用,将整个GUI的主菜单加载到内存中。MainMenuRender()由GameLoop()函数调用,借助渲染系统将主菜单显示在屏幕上。函数MainMenuCallback()是GUI系统的回调函数,对按钮动作做出响应。main.h#ifndef _UGP_MAIN_H_#define _U 阅读全文
posted @ 2011-09-02 18:22 小 楼 一 夜 听 春 雨 阅读(690) 评论(0) 推荐(0)
摘要: GUI系统将主要由按钮和静态文本控件对象构成。同样,可以指定和按钮、文本一起显示的背景图。GUI系统是2D的。这意味着指定对象位置时,用不到Z轴。另外,使用正交投影方式渲染GUI,这样可以根据像素位置指定屏幕位置,而不是使用标准单位来指定屏幕位置。回忆一下(0,0)对应的是屏幕的左上角。在Windows系统中,左上角同样是(0,0)。有了该信息,就可以轻松地确定玩家的鼠标指针是否在要创建的GUI系统的控件上或是正在按该控件。只要在规划按钮和文本位置时,记得左上角是(0,0),就能创建任何限制在系统范围内的GUI。当涉及到背景图时,没必要考虑它的位置,因为该图像是一个由两个三角形构成的全屏图像。 阅读全文
posted @ 2011-09-01 21:31 小 楼 一 夜 听 春 雨 阅读(829) 评论(0) 推荐(0)
摘要: // FPS info.// FPS相关变量int g_fps = 0; // FPS帧率值char g_fpsStr[16] = {0}; // 存放帧率值float g_time = 0.0f; // 系统运行时间float g_lastTime = 0.0f; // 持续的时间// 计算帧率void GetFPS(){ // Get the second in millisecond then multiply it to convert to seconds. // g_time获取操作系统启动到现在所经过的毫秒数,乘以0.001f得... 阅读全文
posted @ 2011-08-30 23:06 小 楼 一 夜 听 春 雨 阅读(1832) 评论(0) 推荐(0)
摘要: 为了在一个基本层次上显示文本,要用到两个不同的对象,即LPD3DXFONT和RECT这两个结构。LPD3DXFONT用于创建和显示文本,而RECT用于确定要显示的文本位置。为了创建LPD3DXFONT对象,就要用到一个名为D3DXCreateFont()的函数。该函数原型如程序清单5.1所示。其成员变量如下:■ Height:字体字符的高度■ Width:字体字符的宽度■ Weight:打印字体的权重(即:粗体)■ MipLevels:文本的Mipmap级别■ Italic:字体是否为斜体■ Charset:用到的字符集■ OutputPrecision:指定Windows与期望字体大小的匹配 阅读全文
posted @ 2011-08-30 15:29 小 楼 一 夜 听 春 雨 阅读(3709) 评论(0) 推荐(1)
摘要: 24.的程序代码源于书籍附带光盘,运行得不到正确结果,由于bool InitializeObjects(),void RenderScene()这2个函数中的代码所致。先看这2个函数,原来的代码如下:bool InitializeObjects(){ // Setup the g_Light source. g_Light.Type = D3DLIGHT_DIRECTIONAL; g_Light.Direction = D3DXVECTOR3(0.0f, 0.0f, 1.0f); g_Light.Diffuse.r = 1; g_Light.Diffuse.g =... 阅读全文
posted @ 2011-08-30 14:59 小 楼 一 夜 听 春 雨 阅读(620) 评论(0) 推荐(0)
摘要: main.h main.cpp 无变化define.h#ifndef _UGP_DEFINES_H_#define _UGP_DEFINES_H_#include<windows.h>// Boolean values.#define UGP_INVALID -1#define UGP_OK 1#define UGP_FAIL 0// Light type defines.#define LIGHT_POINT 1#define LIGHT_DIRECTIONAL 2#define LIGHT_SPOT 3// Window handle (... 阅读全文
posted @ 2011-08-30 11:27 小 楼 一 夜 听 春 雨 阅读(988) 评论(0) 推荐(0)
摘要: 游戏中应用的例子:游戏中打开观察人物的界面,UI上显示的人物就是通过这种方式绘制出来的。渲染到纹理是D3D中的一项高级技术。一方面,它很简单,另一方面它很强大并能产生很多特殊效果。 比如说发光效果,环境映射,阴影映射,都可以通过它来实现。渲染到纹理只是渲染到表面的一个延伸。我们只需再加些东西就可以了。首先,我们要创造一个纹理,并且做好一些防范措施。第二步我们就可以把适当的场景渲染到我们创建的纹理上了。然后,我们把这个纹理用在最后的渲染上。 ?main.cpp 首先我们得声明所需要的对象。当然我们需要一张用来渲染的纹理。此外,我们还需要两个Surface对象。一个是用来存储后台缓冲区,一个用.. 阅读全文
posted @ 2011-08-29 20:31 小 楼 一 夜 听 春 雨 阅读(2593) 评论(0) 推荐(1)
上一页 1 ··· 57 58 59 60 61 62 63 64 65 ··· 94 下一页