随笔分类 -  D3D

摘要:这两种方式都可以绘制三角形网格,那么在什么情况下使用它们呢? 如果要画多个三角型,那么使用D3DPT_TRIANGLELIST一定要配合IndexBuffer,否则的话将要重复定义很多顶点,如果要画少量的三角型,则可以使用D3DPT_TRIANGLESTRIP来代替D3DPT_TRIANGLELIS 阅读全文
posted @ 2012-04-16 10:49 小 楼 一 夜 听 春 雨 阅读(319) 评论(0) 推荐(0)
摘要:1.Viewport和Frustum有什么区别?2.Viewport和Frustum的NearClipPl?ane有什么区别?3.Vertex,Point,Vector有什么含义上的区别?Plane,Face和Mesh呢?4.为什么顶点会有W分量,它怎么算出来的?干什么用的?5.在一次完整的顶点渲染管线中,最多会出现多少种坐标系?(例如世界坐标系)6.上面的每个坐标系的实际意义是什么?互相之间怎么转换?转换矩阵怎么写,意义又是什么?7.光照是怎么计算的?光源可以设置Ambient,Diffuse...为什么Material也可以设置Ambient,Diffuse...?为什么顶点数据中还可以再 阅读全文
posted @ 2012-03-01 10:16 小 楼 一 夜 听 春 雨 阅读(1185) 评论(0) 推荐(0)
摘要:设置纹理采样属性HRESULT SetSamplerState( DWORD Sampler, //指定纹理采样属性的纹理层ID(0~7) D3DSAMPLERSTATETYPE Type, //纹理过滤类型 DWORD Value //设置纹理采样属性值);第二个参数D3DSAMPLERSTATETYPE Type取值:D3DSAMP_MAGFILTER //处理放大过滤D3DSAMP_MINFILTER //处理缩小过滤D3DSAMP_MIPFILTER //多纹理过滤D3DSAMP_MIPMAPLODBIAS //多级纹理级数偏移值,初始值为0D3DSAMP... 阅读全文
posted @ 2011-10-19 10:39 小 楼 一 夜 听 春 雨 阅读(2925) 评论(0) 推荐(0)
摘要:IDirect3DDevice9::SetVertexDeclarationSets a Vertex Declaration (Direct3D 9).HRESULT SetVertexDeclaration( IDirect3DVertexDeclaration9 * pDecl);ParameterspDecl[in] Pointer to an IDirect3DVertexDeclaration9 object, which contains the vertex declaration.Return ValuesIf the method succeeds, the return. 阅读全文
posted @ 2011-10-19 10:27 小 楼 一 夜 听 春 雨 阅读(2575) 评论(0) 推荐(0)
摘要:因为游戏里面绘制Ui,调用lock函数来lock数据buffer的时候用到了如下3个标志。D3DLOCK中D3DLOCK_NOSYSLOCKsdk中的原文是:The default behavior of a video memory lock is to reserve a system-wide critical section, guaranteeing that no display mode changes will occur for the duration of the lock. This option causes the system-wide critical sect 阅读全文
posted @ 2011-10-18 17:42 小 楼 一 夜 听 春 雨 阅读(2265) 评论(0) 推荐(0)
摘要:游戏中的动画对于创建所喜欢的模拟必不可少。当动画模拟人物模型时,手头上有大量可供选择的内容。近来,许多游戏都选择使用一种名为骨骼动画的技。骨骼动画是一种允许程序员借助名为骨骼或链接的节点层次结构动画模拟模型的技术。链接在一起的骨骼或链接而形成的层次结构就构成了骨架。这些骨架与网格连接在一起,可以制作出真实的动画模拟。过去,开发人员对人物及其他类似对象使用一种名位关键帧的动画模拟技术。在该技术中,开发人员需要为物体动画的每一帧存储整个网格的备份。必须预处理对象位置,这使得对象和外界或其他物理之间的实际交互变得非常困难。还记得射杀一个游戏角色时,它穿过墙和周围物体倒下的时刻么?例如,如果射杀一个靠 阅读全文
posted @ 2011-10-11 17:18 小 楼 一 夜 听 春 雨 阅读(4125) 评论(1) 推荐(0)
摘要:http://www.cppblog.com/lovedday/archive/2007/05/03/23385.html大家都知道,一个3D 场景中,我们见到的任何光辉灿烂的物体,都是由一个一个面片组成的。而装载面片位置信息的就是其各个定点的三维坐标。这是用来在模型中存储的,而要把物体显示在屏幕上,还需要将它们转换成显示器上的二维坐标。这就需要对每个点实施一套 3 to 2 的转换公式,在Direct3D中叫做“几何流水线”(Geometry Pipeline)。每渲染一桢,我们都要用到这条流水线把所有定点的坐标转化成当前要显示的位置。不过放心,D3D不会改变你原有的顶点坐标,变换出的顶点数 阅读全文
posted @ 2011-10-10 17:06 小 楼 一 夜 听 春 雨 阅读(1082) 评论(0) 推荐(0)
摘要:在D3D中,一共有三种基本图元,分别是点、线和三角形。点是最简单的图元,由它可以构成一种叫点列(point list)的图元类型。线是由两个不重合的点构成的,一些不相连的线组成的集合就叫线列(line list),而一些首尾相连但不形成环路的线的集合就叫线带(line strips)。同理,单独的三角形集合就叫三角形列(triangle list),类似于线带的三角形集合就叫三角形带(triangle strips),另外,如果多个三角形共用一个顶点作为它们的一个顶点的话,那么这个集合就叫三角形扇(triangle fans)。还是画图比较容易理解吧: 这些图元有什么用呢?基本上我们可... 阅读全文
posted @ 2011-10-10 11:34 小 楼 一 夜 听 春 雨 阅读(2429) 评论(2) 推荐(0)
摘要:直线:#include<d3d9.h>#include<d3dx9.h>#include<mmsystem.h>#pragma comment(lib, "d3d9.lib")#pragma comment(lib, "d3dx9.lib")#pragma comment(lib, "winmm.lib")#define WINDOW_CLASS "UGPDX"#define WINDOW_NAME "Straight Line Animation"#defi 阅读全文
posted @ 2011-10-09 17:21 小 楼 一 夜 听 春 雨 阅读(595) 评论(0) 推荐(0)
摘要:游戏引擎开发之路这条路很长,因为必需懂得和用到的东西太多了。学习次序1、率先是语言方面,这个问题未曾太多的抉择的余地,大约上是用C和C++;VB的也有,然而很少;C#因为微软的力挺,在游戏开发中也逐渐多了示例。打听大约语义和语法就能够下一步了。万一想C++学通晓了在往下学,估计就未曾时机往下学了,因为你的殷勤可能在这都花费了。这个的学习是要不时重复的,想一遍学好是不可能的。2、数据构造的知识。这是大约的,而且对于算法的优化,速度的晋级,在游戏开发中也是极为考究的。教程许多,关键还是自己的思忖和掌握。3、Visual Studio 环境的利用。这个比拟容易然而却极其重要,万一连筷子都不会用,想吃 阅读全文
posted @ 2011-10-04 01:53 小 楼 一 夜 听 春 雨 阅读(736) 评论(0) 推荐(1)
摘要:12.4 使用UMF文件为 www.UltimateGameProgramming.com 创建的最终模型格式(Ultimate Model Format,UMF),它的模型文件作为一种常用的文件格式,用于保存几何图形数据。该文件格式是一种简单的二进制格式,可以保存顶点位置、纹理坐标、法线值、顶点颜色和三角形索引。UMF文件格式旨在创建静态网格并将其显示在屏幕上。将来,还会有其他版本可以指定动画信息的格式。UMF格式在www.UltimateGameProgramming.com得到广泛使用。该文件格式使用简单,既包含了小的静态对象和角色,也包含了大的静态对象和角色。同样还提供了一种创建自己的 阅读全文
posted @ 2011-09-23 23:59 小 楼 一 夜 听 春 雨 阅读(1268) 评论(0) 推荐(0)
摘要:token.h#ifndef _UGP_TOKEN_H_#define _UGP_TOKEN_H_class CToken{public: CToken() : m_length(0), m_startIndex(0), m_endIndex(0), m_data(0) {} ~CToken() { Shutdown(); } void Reset(){ m_startIndex = m_endIndex = 0; } void SetTokenStream(char *data); bool GetNextToken(char *buffer); bool... 阅读全文
posted @ 2011-09-23 16:18 小 楼 一 夜 听 春 雨 阅读(2020) 评论(1) 推荐(0)
摘要:接下来要介绍的模型文件格式是OBJ格式。该格式非常流行,而且可以使用大量3D建模软件导出。OBJ是一种简单的格式,它是可以用任何文本编辑器打开和保存的文本文件。准确的说,OBJ文件并不是设计用于处理与动画相关的信息,但如果有一个需要快速加载到场景中的静态对象,OBJ也许会有用。已经被导出OBJ格式的模型由顶点、法线、纹理坐标和三角形索引(外观)组成。因此,在OBJ格式中将不为除了简单静态网格之外的任何对象使用模型。【注意】 使用由不同类型软件导出的OBJ文件时一定要慎重。例如,用Lightwave7.5创建的OBJ文件就不同于3D Studio Max导出的OBJ文件。试着用为稍有不同类型文件 阅读全文
posted @ 2011-09-23 16:15 小 楼 一 夜 听 春 雨 阅读(3143) 评论(1) 推荐(1)
摘要:在现代游戏中,人物和模型由针对每个对象的成千上万个多边形组成。对纹理映射而言这非常复杂,因为它需要为每个多边形的每个顶点设置一对TU和TV纹理坐标。假定有一个包含了5000个三角形的模型。假定不涉及加索引的几何图形(索引),而只使用三角形,那么在整个模型中将有15000个顶点。至此,除了内置的Direct3D以外,还得手动指定几何图形数据。如果一个模型包含5000个多边形,那么试着指定这些多边形中的每个几何图形数据,就会是一场噩梦。同时还要为顶点手动设置纹理坐标,从时间角度而言,这也是不可以接受的,并且绝对不现实。即使设法对所有模型都做了这一点,那么也会存在将这些信息硬编码到源代码中,以及其他 阅读全文
posted @ 2011-09-17 11:52 小 楼 一 夜 听 春 雨 阅读(2201) 评论(0) 推荐(1)
摘要:DirectSound和DirectMusic是DirectX中两个独立的声音API,它们都可以播放.wav声音(DirectMusic还可以播放.midi声音)。即便它们是独立的,这两种声音API也可以同时用于管理和操作声音数据、调整音廖、3D声音和效果。DirectSound能完成一些DirectMusic所不能完成的工作,反之亦然。所以在开发时需要同时使用两者。例如,DirectMusic需要使用DirectSound设置单个声音文件的音量、音调和摇摄,因为它自己不能完成这个工作。在介绍这两种API作为声音接口完成任务的函数、原型和结构之前,下面几个部分将详细介绍DirectSound和 阅读全文
posted @ 2011-09-17 00:49 小 楼 一 夜 听 春 雨 阅读(295) 评论(0) 推荐(0)
摘要:游戏项目第9部分:增加输入系统该游戏项目将添加对引擎和主菜单的支持。引擎项目中出现的三个新文件分别是InputInterface.h、DirectInput.h和DirectInput.cpp。第一个文件InputInterface.h用于定义输入系统和输入设备基类的头文件。每个类都提供了派生类需要实现的默认函数。基类中的每个成员函数都是从DirectInput演示程序中提取出来的相同类。实际上,所有这些代码都很相似。在该输入系统和为演示程序创建的输入系统之间的唯一差别在于该输入系统将事情按照各自的类分开处理,而不是包含在一个巨大的类中一起处理。InputInterface.h#ifndef 阅读全文
posted @ 2011-09-17 00:39 小 楼 一 夜 听 春 雨 阅读(474) 评论(0) 推荐(0)
摘要:初始化DirectInput系统,这仅需调用DirectInput8Create()函数即可.HRESULT WINAPI DirectInput8Create( HINSTANCE hinst, // 实例句柄 DWORD dwVersion, // 版本标识符 REFIID riidltf, // 输入系统的唯一标识符 LPVOID * ppvOut, // 指向正在创建的输入系统对象指针 LPUNKNOWN punkOuter // IUnKnown相关接口指针 ); 如果调用成功,D... 阅读全文
posted @ 2011-09-17 00:24 小 楼 一 夜 听 春 雨 阅读(1132) 评论(0) 推荐(0)
摘要:第一个新文件是BoundingGeometry.h头文件。该头文件包含了3个类和两个函数。第一个类是边界几何图形基类,创建其他边界几何图形时可以从该类派生。第二个类是边界框类,第三个是边界球类。头文件中的两个函数分别是BoxToBoxIntersect()和SphereToSphereIntersect()。这两个函数分别用于检测两个方框和两个球体之间的碰撞。每个类中的成员函数分别是CreateFromPoints()、isPointInside()、两个Intersect()、GetPlanes()和isRayInside()。在创建涉及的边界几何图形时,会用到CreateFromPoint 阅读全文
posted @ 2011-09-14 23:00 小 楼 一 夜 听 春 雨 阅读(402) 评论(0) 推荐(0)
摘要:在3D虚拟世界中检测碰撞?如果世界是由多个动态物体构成的,充满了成万或成千万的三角形,那么如何用一种快速有效的方式检测和避免可能发生的碰撞?要解决这个问题其实并不简单。使用数学运算检查两个三角形之间是否存在碰撞,非常消耗CPU,同样对于射线到三角形的测试也是如此。假想一下,如果一个三角形需要很大的CPU开支,那么几千个或几百万个三角形将会立刻摧毁所有现代处理器的性能。在游戏开发中实现某些事物的最快方法是采用捷径,并在必要时使用近似值。如果问题可以简化为一个更容易处理、计算更快的形式,那么有可能实现某一种技术而不会影响程序性能,而这是在长时间做某件事情时才会出现的情况。然而这样做会产生新问题:使 阅读全文
posted @ 2011-09-13 22:57 小 楼 一 夜 听 春 雨 阅读(1917) 评论(0) 推荐(0)
摘要:要介绍的引擎中出现的第一个新文件是mathDefines.h头文件。该文件保存了所有的define语句,这些语句是数学库、引擎及游戏都要用到的内容。这些define语句包含了π(圆周率,圆的周长与直径的比值)的定义、平面结果和将度转换成弧度的宏。该文件随着本书的深入而不断扩充,但目前它非常小,只包含几个define语句。程序清单8.30给出了mathDefines.h头文件的内容。mathDefines.h头文件#ifndef _UGP_MATH_DEF_H_#define _UGP_MATH_DEF_H_#define UGP_FRONT 0#define UGP_BACK 1... 阅读全文
posted @ 2011-09-13 15:27 小 楼 一 夜 听 春 雨 阅读(860) 评论(0) 推荐(0)