上一页 1 ··· 59 60 61 62 63 64 65 66 67 ··· 94 下一页
摘要: 在将图像施加到表面时,并非图像的所有部分都是可见的。例如,如果有一幅叶子的图像,并且只想看到图像中实际构成叶子的那一部分内容,而不是空的场景,就需要使用名为“透明度”的技术,以帮助实现预期效果。有了透明度,就可以设置图像的一些像素可见,而另一些像素不可见。 使用RGBA纹理图像中的Alpha成分或顶点颜色的alpha成分可以控制透明度。同样,可以将像素设为半透明,而不是可见或不可见。这意味着图像的某些部分在某种程度上是可见的,而某种程度上像玻璃一样是可以看穿的。这对于像菜单或GUI对象、窗口、X射线视觉等这样的东西而言非常有用。控制图像的alpha通道或是顶点颜色的alpha通道可以控制显示给 阅读全文
posted @ 2011-08-22 15:35 小 楼 一 夜 听 春 雨 阅读(942) 评论(0) 推荐(0)
摘要: 多纹理贴图的基本要素就是使用多个纹理。创建和加载多个Direct3D纹理对象即可实现。当使用硬件多纹理渲染纹理时,要为每个顶点指定两套纹理坐标。这只需在顶点结构中另外添加两个浮点成员变量即可完成,即在FVF中用D3DFVF_TEX2替换D3DFVF_TEX。code:#include<d3d9.h>#include<d3dx9.h>#define WINDOW_CLASS "UGPDX"#define WINDOW_NAME "D3D Multi-Texture Mapping"#define WINDOW_WIDTH 640#d 阅读全文
posted @ 2011-08-22 15:05 小 楼 一 夜 听 春 雨 阅读(1615) 评论(0) 推荐(0)
摘要: 纹理映射是一种将图形施加到表面的技术。以简单的一堵墙为例,这种技术可以只需要两个绘制有砖纹理的三角形即可。这样就可以为表面增加大量的细节,而不必使用大量的多边形。纹理映射使用了图像数据并将图像数据绘制(映射)到表面上。该表面看上去就像有一幅图在它上面。所以,如果有一堵墙,并将砖块的纹理施加到这堵墙上面,那么即便只是这个表面使用了两个三角形,它看上去也像场景中的一堵墙。 Direct3D中的纹理就是一幅映射到表面上的图像,这样可以让表面显示比实际上更多的细节。在3D场景中实现纹理映射,最常见的方法是从外部文件加载图像数据。该文件可以存在于硬盘、软盘或光盘等载体上,同样该文件可以在场景中的多个表. 阅读全文
posted @ 2011-08-22 13:55 小 楼 一 夜 听 春 雨 阅读(7907) 评论(0) 推荐(0)
摘要: 该游戏项目一开始先创建名为light.h、material.h的两个文件。light.h头文件用于创建灯源结构,该结构用于创建Direct3D中的灯源对象。以某种方式实现该结构,这样也可将其用于OpenGL或其他渲染系统。光源结构模仿了Direct3D中的D3DLIGHT结构,所以它们是完全兼容的。light.h#ifndef _UGP_LIGHT_H_#define _UGP_LIGHT_H_struct stLight{ stLight() { type = 0; posX = 0, posY = 0, posZ = 0; dirX = 0, dirY... 阅读全文
posted @ 2011-08-21 22:55 小 楼 一 夜 听 春 雨 阅读(453) 评论(0) 推荐(0)
摘要: 在Direct3D中创建光源相对比较简单,因为只是为了使用光源,而不需要知道太多Direct3D内部使用的算法。所以即使对先前光照和阴影的讨论一头雾水,也不用担心。有一些亲自实践的经历之后,读者就可以使用Direct3D中的光照,而不必知道它的工作机理或自己动手计算光照方程。默认情况下,即使没有指定任何光源,Direct3D也会打开硬件光照。到目前为止,都是将其设置为FALSE,那是因为还没有用到光照。在初始化中调用SetRenderState()函数,并将该函数的参数D3DRS_LIGHTING设为FALSE。 为了在Direct3D中创建光源,必须创建一个D3DLIGHT对象。为了方便.. 阅读全文
posted @ 2011-08-21 20:52 小 楼 一 夜 听 春 雨 阅读(1323) 评论(0) 推荐(0)
摘要: #include<d3d9.h>#include<d3dx9.h>#define WINDOW_CLASS "UGPDX"#define WINDOW_NAME "Built-in Direct3D Shapes"#define WINDOW_WIDTH 640#define WINDOW_HEIGHT 480// Function Prototypes...bool InitializeD3D(HWND hWnd, bool fullscreen);bool InitializeObjects();void RenderScen 阅读全文
posted @ 2011-08-21 19:41 小 楼 一 夜 听 春 雨 阅读(3396) 评论(0) 推荐(0)
摘要: 通常在计算机图形学中有三类光源需要考虑,分别是点光源、聚光光源和方向性光源。每类光源分别描述了日常生活中见到的不同类型的光。例如,点光源可以是某个距离上向所有方向发光的任何光源,如灯泡;聚光光源通过圆锥发光,如闪光灯;而方向光则是从特定的方向,但是无法辨别的光源处发光。【注意】 方向光不同于点光和聚光的是,现实世界中并没有这样的光。另一方面,在计算机图形学中,它们确实存在而且可以由数学计算得到。 1. 点光源如本章前面所提到的一样,点光源是一种在某个距离上向所有方向发光的光源。随着光传播一定的距离,它会损失一定的能量而且亮度也会逐渐降低。可以将点光源认为是灯泡、蜡烛,或是在一定距离上可以发光的 阅读全文
posted @ 2011-08-21 19:30 小 楼 一 夜 听 春 雨 阅读(972) 评论(0) 推荐(0)
摘要: 工程GameProject1: main.h, main.cpp这两个文件用于创建游戏Stranded。工程GameEngine:RenderInterface.h, D3DRenderer.h, D3DRenderer.cpp, engine.h, defines.h.D3DRenderer.h和D3DRenderer.cpp用于创建Direct3D渲染系统;RenderInterface.h文件是一个基类,D3DRenderer就是从该类派生出来的;engine.h和defines.h包含了游戏引擎中要用到的Define(定义)、Function Prototype(函数原型)、Enume 阅读全文
posted @ 2011-08-20 18:11 小 楼 一 夜 听 春 雨 阅读(1066) 评论(0) 推荐(0)
摘要: 2.3 引擎规划 和当今的商业游戏引擎相比较而言,本书中这个构建在游戏上的游戏引擎,显得微不足道。游戏Stranded的引擎小到足以包含在单独一个库中。由于游戏引擎取决于开发人员的需求,因此开发或分割游戏引擎的正确方法不止一种。通常,最好是将无关的系统分割成不同的动态链接库(DLL),这样可以更方便地将改动过的软件更新、修改和重新发布给用户。如果有任何类型的更新,那么将全部.exe文件重新发布给已经购买该款游戏的用户很不经济。只要开发人员重新发布一个动态链接库(DLL)(只是整个语系中的一小部分),那么效率将会提高很多。虽然现在的宽带Internet使得下载更新信息的速度比过去快很多,但目前所 阅读全文
posted @ 2011-08-19 17:18 小 楼 一 夜 听 春 雨 阅读(601) 评论(0) 推荐(0)
摘要: #include<d3d9.h>#include<d3dx9.h>#pragma comment(lib, "d3d9.lib")#pragma comment(lib, "d3dx9.lib")#define WINDOW_CLASS "UGPDX"#define WINDOW_NAME "Template"#define WINDOW_WIDTH 640#define WINDOW_HEIGHT 480// Function Prototypes...bool InitializeD3D 阅读全文
posted @ 2011-08-19 16:59 小 楼 一 夜 听 春 雨 阅读(830) 评论(0) 推荐(0)
上一页 1 ··· 59 60 61 62 63 64 65 66 67 ··· 94 下一页