上一页 1 ··· 6 7 8 9 10 11 12 13 下一页
摘要: 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 阅读(1292) 评论(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 阅读(778) 评论(0) 推荐(0) 编辑
摘要: 在D3D图形编程中,你是不是遇到过吃完饭回来,就发现先前运行的DEMO无情地被DOWN掉了的情况。是否遇到过,在DEMO运行过程中,修改了屏幕分辨率,DEMO就DOWN掉了的情况? 这就是传说中的D3D设备丢失。 下面是一些简单的总结。1.什么时候会设备丢失?全屏/窗口模式的切换、屏幕锁、修改屏幕分辨率等。上面的这些行为会使D3D设备重置显卡状态以及刷新相应的缓冲区,所以会导致设备的丢失。另外,如果你需要重建后台缓冲区。则同样应该按设备丢失的方法来处理和重新加载你的资源。2.哪些资源会影响设备丢失?在创建D3D资源时,可以选择自己管理D3D资源还是让D3D帮你管理资源,前者需要在设备丢失时手动 阅读全文
posted @ 2010-04-26 08:45 麒麟子MrKylin 阅读(1585) 评论(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) 编辑
摘要: 游戏开发中,计算机图形学是必不可少的东西。许多人也是从接触图形开始而进入游戏行业的。3D管线导论这本书诠释了3D管线的细节。为大家解开了萦绕已久的迷团。很多次偶然地看到 《3D pipeline tutorial》(3D管线导论)这本书的推荐。 今天就狠下心来搜索了一下。 下载了一个电子版来瞧瞧。发现自己曾经百思不得其解的内容就全在里面。这本书介绍了我们的图形应用程序场景中一些常用的方法。如:对象遍历,对象移动,摄像机移动,可见对象查询,LOD等。而本书的重头戏则在于,他详细地讲述了一个三角形和其纹理等信息,从输入到输出到屏幕所经历的过程。先前我就一直在查找这方面的资料,要是自己当初就下了这本 阅读全文
posted @ 2010-04-25 23:35 麒麟子MrKylin 阅读(534) 评论(0) 推荐(0) 编辑
摘要: http://www.guibian.com/article.asp?id=87我在这个行业呆了快2年半了。其中辗转过2,3个公司,有业内很大的知名公司,也有业内名不见经传的小公司。从业过程中也认识了不少在各大公司的同行。如果不出意外的话,基本上我不打算继续在这个行业呆下去了,尽管我现在收入颇丰,但是我觉得这不是我想要的生活方式。那么我们来讨论下目前整个国内游戏行业的状况。我觉得是非常糟糕的。据我估算,有一定游戏制作水平的人员应该不到万分之一,而这当中很多老人已经从事行政工作,另外一些虽然在技术的一线,但是由于年长或者其他原因,工作时长较少,也不足以面对纷繁复杂的行业进步。当然更重要的原因是以 阅读全文
posted @ 2010-04-25 19:19 麒麟子MrKylin 阅读(381) 评论(0) 推荐(1) 编辑
摘要: 材质,这个词有各行各业都有自己的解释。美工把物体贴图和物体颜色,高光等统称为材质。D3D和OPENGL这样的图形接口则把物体表面贴图单独叫做纹理,而把漫反射,高光等叫做材质。而在游戏引擎或图形引擎中提到的材质,则与此不同。 引擎中提到的材质不仅上面的的内容。 引擎中所谓的材质,是指物体在渲染时一系列的状态控制。 如,ALPHA混合开关以及ALPHA混合因子、纹理过虑方式,纹理通道状态、纹理矩阵、裁剪模式等,在D3D中,就是SetRenderState,SetTextureStageState,SetSamplerStateState等所控制的。在OPENGL中,则大多数由glEnable所控制 阅读全文
posted @ 2010-04-24 14:47 麒麟子MrKylin 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 我一向是不太喜欢给一些东西强加上个名字。但为了随波逐流,我还是这样做了。在我们的游戏开发中,通常会遇到两个模块之间的通信。 回调估计是最常用的方式了。 回调的设计思想很简单,就是两个对象相互注册,然后在需要的时候调用对方的函数。如下:class B;class A{public: void RegisterCallback(B* pB) { m_pB = pB; } void ActiveA() { m_pB-DoB(); } void DoA(){}protected: B* m_pB;};class B{public: void RegisterCallback(A* pA) { 阅读全文
posted @ 2010-04-24 13:39 麒麟子MrKylin 阅读(432) 评论(1) 推荐(0) 编辑
摘要: 纹理内容常常是存在sRGB格式中的。关于这个格式的细节是可以被找到的。通常,像素管线假定颜色是线性的以便融合(blending)操作可以在线性空间中进行。因为sRGB中的内容是Gamma较正,所以融合操作在线性空间中处理会导致错误的结果。显卡在读到有关sRGB内容的时候便会取消Gamma较正以避免错误的发生。然后当输出像素的时候再将像素信息写回sRGB格式中。在这种情况下,所有像素管线中的操作就可以都在心线性空间中进行。Gamma校正在D3D9中。 可以指明一张纹理是不是Gamma 2.2(sRGB) 较正.驱动程序将会在SetTexture的时候将其转换到线性的Gamma以进行融合操作。或者 阅读全文
posted @ 2010-04-24 12:12 麒麟子MrKylin 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 关于D3DPOOL的翻译注:D3DPOOL在D3D资源管理中有着重要的意义,我们必须弄清楚自己创建的资源在什么地方,才能知道在设备丢失的时候,哪些需要重建;在优化渲染的时候,哪些是瓶颈。下在是DX SDK文档中对于D3DPOOL的介绍,我在看的时候顺便翻译了过来。 希望给不方便看英文文档的朋友一些帮助。 由于本人英语能力有限,故在翻译的时候,给出了原文。方便个别单词的对照。另外,D3DUSAGE也是和资源紧密相关的内容。朋友FancyBit对其作了翻译,也贴于下部。Defines the memory class that holds the buffers for a resource.这句 阅读全文
posted @ 2010-04-24 12:11 麒麟子MrKylin 阅读(430) 评论(0) 推荐(0) 编辑
摘要: “材质(material)”,材质是一个很基本的术语,表示你的物体对光的反射方式。但是对它的实现并不像其解释这样简单,我们会用这一章节进行详细地介绍Ogre中相关的技术。我们刚才提及过,材质定义了物体对光线反射的处理方法。这里暗示了材质的表现与光源的类型相关:聚光(Spotlights)、点光源(point lights)以及有向光(directional lights)对材质的表现有着完全不同的影响。简单来讲,它们都是对物理世界真实光源类型的模拟,所以材质对它们的反射也遵守着其在物理世界中的规则。注意:虽然在Ogre里面,材质定义了物体如何反射光线的方法,但实际上并没有真的把光反射到附近的物 阅读全文
posted @ 2010-04-24 12:07 麒麟子MrKylin 阅读(1433) 评论(0) 推荐(0) 编辑
摘要: 首先我要说明,我在博客里写文章并非说明我很厉害。比起从业游戏行业多年的前辈们来说,我是微不足道的。我之所以斗胆在博客里写出些想法和感受。主要目的就是为了吸引前辈们的围观,为我指正。为了大家的游戏事业一起交流,奋斗。  进入游戏开发行业快一年了,在这一年中,我和其它同事们感受颇多。大家在一起努力,一起解决着各总各样的问题。 当然这得感谢给与我机会的他们,让我早早地踏上了自己梦想的道路。  在以后的文章中,我会尽力写出自己的感受,以及在开发中的想法。我并不是说所写出来的东西就是我在工作中所做的东西;相反,二者是截然不同的。另外,为了保证工作与私人生活的不冲突,我也会尽力避免出现将工作中重要的信息泄 阅读全文
posted @ 2010-04-24 11:14 麒麟子MrKylin 阅读(390) 评论(0) 推荐(0) 编辑
上一页 1 ··· 6 7 8 9 10 11 12 13 下一页