随笔分类 -  游戏开发

D3D类游戏开发技术
摘要:14.2.1 绘制粒子系统 因为粒子系统是动态的,在每一个帧中我们需要更新系统中的粒子,对于渲染粒子系统的一种直观但效率低下的方法如下: 创建一个足够大的顶点缓存保存最大数量的粒子。 每一帧里执行: A. 更新所有粒子。 B. COPY所有活着的粒子到顶点缓存。 C. 绘制顶点缓存。 这个方法正确,不过不是最有效率的。第一,顶点缓冲必须足够大以保存... 阅读全文
posted @ 2008-04-04 20:07 至尊王者 阅读(1113) 评论(0) 推荐(0) 编辑
摘要:14.2粒子系统的组成 粒子系统是粒子的集合,用来保存和显示这些粒子。粒子系统维护所有粒子的全部属性,影响系统中的所有粒子:粒子的尺寸,起始的位置及应用在粒子上的纹理等。粒子系统的方法负责更新、显示、杀死和创建粒子。 虽然不同的具体(与抽象是相对的)粒子系统有不同的行为,我们归纳并找到一些所有的粒子系统共有的基本属性,我们把这些公共的属性放到一个抽象的cParticleSystem基类,它是我... 阅读全文
posted @ 2008-04-04 20:06 至尊王者 阅读(1071) 评论(0) 推荐(0) 编辑
摘要:许多自然现象是由很多小的小颗粒组成的,它们有相似的行为。(例如,雪花落下,闪烁的火焰,冲出枪管的“子弹”),粒子系统用来模拟这种现象。 14.1 粒子和点精灵(Point Sprite) 粒子是一个很小的对象,它通常用来模拟数学中的一个点。点元是用来显示粒子的很好的方案,可是点元被光栅化成一个简单的像素。这没给我们多少灵活性,因为我们想有各种大小不同的粒子,并且把整个纹理平滑映射到这些粒子上。... 阅读全文
posted @ 2008-04-04 20:05 至尊王者 阅读(1951) 评论(0) 推荐(0) 编辑
摘要:这个程序创建并渲染几种不同的能够使用D3DXCreate*函数创建的3D物体。 Uses a left-handed coordinate system to create a mesh containing an axis-aligned box.HRESULT D3DXCreateBox( LPDIRECT3DDEVICE9 pDevice, FLOAT Width, FLOAT Hei... 阅读全文
posted @ 2008-03-20 21:28 至尊王者 阅读(1078) 评论(0) 推荐(0) 编辑
摘要:这个程序使用D3DXCreateTeapot函数创建并用DrawSubset函数渲染一个纺纱茶壶。 Uses a left-handed coordinate system to create a mesh containing a teapot.HRESULT D3DXCreateTeapot( LPDIRECT3DDEVICE9 pDevice, LPD3DXMESH * ppMesh, ... 阅读全文
posted @ 2008-03-20 21:27 至尊王者 阅读(1020) 评论(0) 推荐(0) 编辑
摘要:立方体——只比三角形稍微复杂一点,这个程序渲染一个线框立方体。 这个简单的绘制和渲染立方体的程序的运行结果如下图所示: 源程序: /************************************************************************************** Renders a spinning cube in wireframe mode. D... 阅读全文
posted @ 2008-03-20 21:27 至尊王者 阅读(483) 评论(0) 推荐(0) 编辑
摘要:3.1顶点/索引缓存 顶点和索引缓存有相似的接口并且共享相似的方法;因此我们把它们合在一起讲解。一个顶点缓存是一块连续的存储了顶点数据的内存。同样的,一个索引缓存是一块连续的存储了索引数据的内存。我们使用顶点和索引缓存保存我们的数据是因为它们能被放置在显存中。渲染显存中的数据要比渲染系统内存中的数据快的多。 在代码中,一个顶点缓存是通过IDirect3DVertexBu... 阅读全文
posted @ 2008-03-20 21:26 至尊王者 阅读(2314) 评论(0) 推荐(0) 编辑
摘要:聚光灯示例,截图: 源代码: /************************************************************************************** Demonstrates using a spot light with D3DX objects. You can move the spotlight around the sce... 阅读全文
posted @ 2008-03-20 21:25 至尊王者 阅读(693) 评论(0) 推荐(0) 编辑
摘要:点光源示例,截图: 源代码: /************************************************************************************** Demonstrates using a point light with D3DX objects. You can orbit the scene using the left a... 阅读全文
posted @ 2008-03-20 21:25 至尊王者 阅读(456) 评论(0) 推荐(0) 编辑
摘要:平行光示例: The GetAsyncKeyState function determines whether a key is up or down at the time the function is called, and whether the key was pressed after a previous call to GetAsyncKeyState. Syntax SHORT... 阅读全文
posted @ 2008-03-20 21:24 至尊王者 阅读(538) 评论(0) 推荐(0) 编辑
摘要:5.4光源 Direct3D支持三种类型的光源。 点光源——这种光源在世界坐标中有一个位置且向所有方向上都照射光线。 方向光源——这种光源没有位置但是向指定方向发出平行光线。 聚光灯——这种类型的光源和手电筒的光类似;它有位置并且发出的光在指定方向上按照圆锥形照射。这个圆锥形有两个角度,θ和φ。角度θ描述内圆锥,φ描述外圆锥。 在代码中一个灯光资源是通过D3DLIGHT9结构来表现的。 ... 阅读全文
posted @ 2008-03-20 21:24 至尊王者 阅读(2179) 评论(0) 推荐(0) 编辑
摘要:为了提高场景的真实性,我们可以为其加入灯光。灯光也能帮助表现物体的立体感以及物体的实体形状。当使用灯光时,我们不再自己指定顶点的颜色;Direct3D中每个顶点都通过灯光引擎来计算顶点颜色,该计算是基于定义的灯光资源,材质以及灯光资源关心的表面方向。通过灯光模型计算顶点颜色会得到更真实的场景。 5.1灯光的组成 在Direct3D灯光模型中,灯光是通过灯光资源的三个成员之一来照射的,... 阅读全文
posted @ 2008-03-20 21:24 至尊王者 阅读(1789) 评论(0) 推荐(0) 编辑
摘要:6.4 Mipmaps 就象6.3节所说的,在屏幕上的三角形和纹理三角形通常是不一样大的。为了使这个大小差异变小,我们为纹理创建mipmaps链。也就是说将一个纹理创建成连续的变小的纹理,但是对它们等级进行定制过滤,因此对我们来说保存细节是很重要的(如图6.4)。 6.4.1 Mipmaps过滤器 mipmap过滤器是被用来控制Direct3D使用mipmaps的。设置mipmap... 阅读全文
posted @ 2008-03-20 21:23 至尊王者 阅读(2864) 评论(0) 推荐(0) 编辑
摘要:纹理映射是一种允许我们为三角形赋予图象数据的技术;这让我们能够更细腻更真实地表现我们的场景。例如,我们能够创建一个立方体并且通过对它的每个面创建一个纹理来把它变成一个木箱(如图6.1)。 在Direct3D中一个纹理是通过IDirect3DTexture9接口来表现的。一个纹理是一个类似像素矩阵的表面它能够被映射到三角形上。 6.1 纹理坐标 Direct3D使用一个纹理坐标系统,它是由用水平方... 阅读全文
posted @ 2008-03-20 21:22 至尊王者 阅读(2838) 评论(0) 推荐(0) 编辑
摘要:该例程演示了怎样对一个立方体映射板条纹理。 截图: vertex.h: #ifndef __VERTEX_H__#define __VERTEX_H__class cTextureVertex{public:float m_x, m_y, m_z;float m_nx, m_ny, m_nz;float m_u, m_v; // texture coordinates cTextureVe... 阅读全文
posted @ 2008-03-20 21:21 至尊王者 阅读(878) 评论(0) 推荐(0) 编辑
摘要:使用DirectX纹理工具创建Alpha通道 绝大多数普通图象文件格式没有存储alpha信息,在这一部分我们给你演示怎样使用DirectX纹理工具来创建一个带alpha通道的DDS文件。DDS文件是一个为DirectX应用程序和纹理设置的图象格式。DDS文件能够利用D3DXCreateTextureFromFile函数读进纹理中,就象bmp和jpg文件一样。DirectX纹理工具被... 阅读全文
posted @ 2008-03-20 21:21 至尊王者 阅读(1664) 评论(0) 推荐(0) 编辑
摘要:我们介绍一种叫做混合(blending)的技术,它允许我们混合像素,我们通常用已经光栅化的像素光栅化同一位置的像素。换句话说就是我们在图元上混合图元,这种技术允许我们完成多种特效。 7.1混合因素 观察图7.1,我们将一个红色的茶壶绘制在一个木质背景上。 假设想让茶壶有一个透明度,以便我们能够透过茶壶看见背景(如图7.2)。 我们怎样才能实现这个效果呢?我们只需要在木箱子上光栅化茶壶三角形,我... 阅读全文
posted @ 2008-03-20 21:20 至尊王者 阅读(4008) 评论(0) 推荐(0) 编辑
摘要:tinyxml是个高效精简的xml解析开源代码. 针对tinyxml直接使用对于对xml不是很熟悉的入门新手来说,有些概念难以理解,因此我将其封装后,供大家使用. 头文件: #include #include "tinyxml.h" using namespace std; class CXML { public: CXML(void) { } ~CXML(void... 阅读全文
posted @ 2008-03-20 09:47 至尊王者 阅读(3633) 评论(0) 推荐(0) 编辑
摘要:1.5初始化Direct3D实例 在本例程中,初始化了一个Direct3D应用程序并用黑色填充显示窗口(如图1.7)。 图1.7 所有的应用程序都包含了d3dUtility.h和d3dUtility.cpp这两个文件,它们所包含的函数实现了所有Direct3D应用程序都要去做的一些常见的功能。例如:创建一个窗口、初始化Direct3D、进入程序的消息循环等。 1.5.1d3dUtility.h... 阅读全文
posted @ 2008-03-16 13:24 至尊王者 阅读(1575) 评论(0) 推荐(0) 编辑
摘要:1.4 初始化Direct3D 下面几点说明怎样初始化Direct3D。根据下边的步骤你能初始化Direct3D: 1.获得一个IDirect3D9接口指针。这个接口用于获得物理设备的信息和创建一个IDirect3DDevice9接口,它是一个代表我们显示3D图形的物理设备的C++对象。 2.检查设备能力(D3DCAPS9),搞清楚主显卡是否支持硬件顶点处理。我们需要知道假如它能支持,我们就能创建... 阅读全文
posted @ 2008-03-16 13:23 至尊王者 阅读(3791) 评论(0) 推荐(0) 编辑