摘要: 原文:http://www.flipcode.com/archives/Elements_Of_A_Game_Engine.shtmlIntroduction (简介)现在我们来说说你将如何写出一个支持华丽特性的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、动态光(dynamic lighting)、体积雾(volumetric fog)、镜面(mirrors)、入口(portals)、天空盒(skyboxes)、顶点Shader(vertex shaders)、粒子系统(particle systems)、静态网格模型(static mesh models)、动画 阅读全文
posted @ 2010-04-26 23:29 麒麟子MrKylin 阅读(414) 评论(0) 推荐(0) 编辑
摘要: /** Example 018 Splitscreen, U( a# q, @( S' f1 ]( p作者:Max Winkel." `9 ?( W; K' V1 x8 \译:小时候可靓了(履霜坚冰)2 m! C! N# J2 i6 a2 Z! Q0 U2 D4 U: U% J1 E5 N! a0 L4 q& x这个例程中我们将学习怎么使用irrlicht中的分屏(比如在赛车类游戏中)& ~$ M; ]8 f. _4 {我们将创建一个被分为4个部分的视口,有3个固定摄相机和一个用户可以控制的摄相机4 N% L! s9 [( l# n好,让们从头文件开始吧(我想没有再多说的必要了)3 C9 |* 阅读全文
posted @ 2010-04-26 09:32 麒麟子MrKylin 阅读(302) 评论(0) 推荐(0) 编辑
摘要: C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片 阅读全文
posted @ 2010-04-26 09:19 麒麟子MrKylin 阅读(249) 评论(0) 推荐(0) 编辑
摘要: 貌似是在《3D游戏编程大师技巧》上看到的这两个函数,当时觉得很牛耶,于是就记下来了,不过至今没有怎么用到,我想估计以后会有用吧。//内嵌汇编的用于4字节填充的函数inlinevoid Mem_Set_QUAD(VOID *dest, UINT data, int count ){ _asm { movedi, dest; edi指向目标内存      movecx, count;要移动的32位字数      moveax, data ;32位数据      repstosd ;移动数据     }//end asm}//end Mem_Set_QUAD//用于2字节(DWORD)数据填充的函 阅读全文
posted @ 2010-04-26 09:17 麒麟子MrKylin 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 理清一个引擎,不得不先理清它的层次结构,进而理清渲染流程。 本文给出了鬼火引擎中的设备抽象层,有助于对鬼火引擎源码的快速阅读。IrrlichtDevice *device =createDevice(driverType, core::dimension2du32(640, 480),16, false, shadows);这个函数大家都很熟悉,那闲话不多说,我们就从这里开始。。。IrrlichtDevice 设备的顶层接口CIrrDeviceStub实现设备顶层接口类,所有设备都从此派生,这里的设备是指和平台相关的设备类成员:video::IVideoDriver* VideoDrive 阅读全文
posted @ 2010-04-26 09:05 麒麟子MrKylin 阅读(1293) 评论(0) 推荐(0) 编辑
摘要: Depth-Buffer(深度缓存)有两种:Z-Buffer 和 W-Buffer,这里讨论这两种深度缓存的区别,以及如何在两者之间转换。  w 的含义  3D空间点的坐标是(x,y,z),为了使矩阵乘法具有平移变换的功效,我们用4D空间中的点(x,y,z,w)来表示3D空间中的点(x',y',z'),这两个不同空间点之间的关系是:    x' = x / w  y' = y / w  z' = z / w    像这样用四维空间点表示三维空间点,或者说用 n + 1 维空间点表示 n 维空间点的方法叫做 “齐次坐标表示法”。    实际使用中,在模型-世界转换、世界-视图转换过程中,w 阅读全文
posted @ 2010-04-26 08:57 麒麟子MrKylin 阅读(779) 评论(0) 推荐(0) 编辑
摘要: 在D3D图形编程中,你是不是遇到过吃完饭回来,就发现先前运行的DEMO无情地被DOWN掉了的情况。是否遇到过,在DEMO运行过程中,修改了屏幕分辨率,DEMO就DOWN掉了的情况? 这就是传说中的D3D设备丢失。 下面是一些简单的总结。1.什么时候会设备丢失?全屏/窗口模式的切换、屏幕锁、修改屏幕分辨率等。上面的这些行为会使D3D设备重置显卡状态以及刷新相应的缓冲区,所以会导致设备的丢失。另外,如果你需要重建后台缓冲区。则同样应该按设备丢失的方法来处理和重新加载你的资源。2.哪些资源会影响设备丢失?在创建D3D资源时,可以选择自己管理D3D资源还是让D3D帮你管理资源,前者需要在设备丢失时手动 阅读全文
posted @ 2010-04-26 08:45 麒麟子MrKylin 阅读(1592) 评论(0) 推荐(0) 编辑
摘要: 译注:对于一个想学好着色器语言(不管是ASM还是HLSL、GLSL)的人来说,了解显卡中相应寄存器的功能和局限是必不可少的。 下面给出了PS 1.X中可用的寄存器的相关信息,希望能给大家带来帮助!有些单词我实在不知道怎么翻译,只可意会!像素着色器需要依靠寄存器来取得顶点数据,输出像素数据,取得计算时的临时结果和关联纹理采样通道(stage)。有几种类型的寄存器,每一种都有特殊的功能和用途。像素着色器需要的用到的数据由寄存器保管,下面是寄器存的所有介绍寄存器类型:描述了四种可用的寄存器和他们各自的用途读取端口限制:单指针使用多个寄存器时的限制R/RW: 描述了哪些寄存器可以用来读,写或是读写。范 阅读全文
posted @ 2010-04-26 08:40 麒麟子MrKylin 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 原文出处不详,我也是看到别人转的贴,觉得很有用! 若作者看到了,可以留言给我,我加上您的原文地址!先说个题外话, 本来我想解答一下最近Creators Club论坛上经常出现的一个问题, 意外的是在网上竟然找不到什么全面的答案..这是个有着复杂答案的简单问题:“为什么我的透明物体的绘制顺序不对, 或者有些不见了?”当绘制一个3D场景时, 对图形进行深度排序是非常重要的, 这样离镜头近才画在远处物体的前面. 我们不会希望看到远处的山把近在眼前的建筑给挡住了!如今有三种深度排序方法得到了广泛的应用:深度缓冲 (也叫做 z-buffering) 油画家算法 背面剔除 不幸的是, 每种都有其局限性. 阅读全文
posted @ 2010-04-26 08:31 麒麟子MrKylin 阅读(322) 评论(0) 推荐(0) 编辑