随笔分类 - 3D游戏引擎编程
摘要:At the very top of the diagram is the Root object. This is your 'way in' to the OGRE system, and it's where you tend to create the top-level objects that you need to deal with, like scene managers, rendering systems and render windows, loading plugins, all the fundamental stuff. If you d
阅读全文
摘要:最近在看《Real Time 3D Terrain Engines Using C++And DirectX 9》,不过是看网上翻译的版本叫《实时地形引擎》,看英文实在蛋疼,还好有翻译版的,要多多感谢承天一大哥!这本书讲解了地形制作的一些技术,更吸引人的是实现了一个小型的渲染引擎,对于我这样的游戏引擎初学者很适合。gaia正是书中构建的引擎的名字。这里来写写一些简单的分析,作为学习笔记。(一)资源管理1、 data_pool.hcPoolGroup:模板类,池组,顾名思义,就是装载一组数据的对象template <class T>class cPoolGroup{public: c
阅读全文
摘要:内存管理内存使用效率和两个东西有关:1,同过new,malloc操作进行动态内存分配很慢,尽量避免,可以通过使用传统内存分配来减少分配开销。2,CPU处理连续的内存区域比处理离散的内存区域要快。所以为了提高效率,要对内存碎片进行处理。通过这两条路线来优化内存管理代码。1.优化动态内存分配通过malloc()和new()等进行动态内存分配是基于堆的。典型的非常慢。因为:1)堆是一个通用存储区域,它被控制来可以分配任何大小的内存,使得malloc,new等函数需要更多的上层管理。导致了缓慢。2)使用malloc,new等函数时系统首先会进行环境切换,切换到核心模式处理内存分配申请,然后又切换会程序
阅读全文
摘要:首先得声明我这篇文章只有很少的篇幅介绍龙书,其实我是想写点东西给那些看完龙书的人。 这是我接触3D图形编程的第一本书,接触3d图形编程前,我看的是《Windows 游戏编程大师技巧》,只看了前几章,当时我急着想去学3D的酷玩意儿,立刻就没耐心看GDI,DirectDraw。转投Direct3D门下,入门书当然是这本龙书了。对我来说龙书最棒的地方在于,它除了开始的数学基础章节外,每一章都能详细地引导读者去实现一个简单的3D特性,从画三角形到摄像机,到简单的粒子系统,地形,甚至到shader。Luna无疑是睿智而狡猾的,他知道初学者往往耐心不够,所以他总是适时地丢出个胡萝卜,让读者保持着继续的动力
阅读全文
摘要:原地址:http://www.cnblogs.com/winsonchen/archive/2008/09/06/1285515.html一、场景管理有很多种方法,如四叉树、八叉树、BSP、模糊K-D树、包围球层次结构等。室内环境主要是BSP为主,从quake3一直延续到现在主流的引擎都是以BSP为基础,BSP使用并不难,关键是数据的生成,这就牵涉到场景编辑器。 Quake3、Unreal:BSP,有自己的编辑器。 FarCry:场景分为室内和室外两部分,室内场景使用BSP, 室外不清楚但应该跟地形有很大关系,同时为了支持超远距离视距使用了地形Occlusion Culling,另外也可以手.
阅读全文
摘要:游戏程序员养成计划 (更新2010.11.6)原文地址:http://www.cnblogs.com/clayman/archive/2009/05/17/1459001.html#2241553仅供个人学习使用,请勿转载,勿用于任何商业用途。作者:Clayman 与玩游戏相比,写游戏要复杂上千万倍,除了需要掌握通用的编程技巧以外,还要有相当的图形学,物理,数学基础,特别是在国内,由于相关资料的缺乏,更是让初学者无从下手。下面总结了一些入门方法和比较容易入手的资料。 首先你要精通一门高级语言,比如C++或者C#,其次,要有良好的英文阅读能力。对游戏开发者来说英文阅读能力是最重要也是最基本的工具
阅读全文
摘要:最近在看阿哲的《3D地形制作全攻略》,写得很好,但是好像网上找不到源码,本来想加QQ请教一下,不过貌似被拒绝了。。。按照书上的方法想做一个光晕效果,看着其实还是不难,但是动手实现的时候还是遇到了麻烦,特别是进行世界坐标->视角转换->投影转换->视口转换的时候,理解起来还是费了一番功夫。就此总结一下。首先说一下光晕实现的思路,就是在世界坐标系中确定太阳的位置,然后通过视角转换->投影转换->视口转换,变换到屏幕坐标,结算其与屏幕中心的连线,在这条直线上面贴上光晕的贴图,光晕的alpha值由太阳(屏幕坐标)到屏幕边界的距离决定,开启alpha融合渲染。基本思想并不难
阅读全文
摘要:网上看到很多对游戏编程有兴趣的朋友都在说《DirectX 游戏开发终极指南》这本书的游戏项目无法编译通过,自己研究了一下,上网也看了好多提问,终于摸索出成功编译的方法,希望跟这些朋友一起分享一下,大家一起学习一起进步。下面开始正题:首先,必须在vs2003以上的环境建立工程,因为最新的dxsdk对vc6已经不支持了,而且《DirectX 游戏开发终极指南》游戏项目中要用到的directinput在vc6下也有错误。要编译通过随书附带的游戏项目示例程序,要用早期版本DX9。0c 因为最新版本的DX9已经没有directmusic了。而本书要用到。我用的是2006年的。好,下面开始新建一个项目,编
阅读全文
摘要:骨骼蒙皮动画(Skinned Mesh)的原理解析(一)一)3D模型动画基本原理和分类3D模型动画的基本原理是让模型中各顶点的位置随时间变化。主要种类有Morph动画,关节动画和骨骼蒙皮动画(Skinned Mesh)。从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是不一样的。Morph(渐变,变形)动画是直接指定动画每一帧的顶点位置,其动画关键中存储的是Mesh所有顶点在关键帧对应时刻的位置。关节动画的模型不是一个整体的Mesh,而是分成很多部分(Mesh),通过一个父子层次结构将这些分散的Mesh组织在一
阅读全文
摘要:当我们在编写地形、BOX或者天空盒等的网格与网格连接处常常会看到有的地方会出现一条缝隙之类的,这个要怎么解决呢?其实不难,还记得学过的DirectX提供的纹理寻址里面的镜像纹理寻址、重叠纹理寻址、边框颜色纹理寻址、一次镜像纹理寻址、夹取纹理寻址,这里我把纹理寻址的枚举类型写出来,看不懂就去查查SDK;typedef enum D3DTEXTUREADDRESS{ D3DTADDRESS_WRAP = 1, D3DTADDRESS_MIRROR = 2, D3DTADDRESS_CLAMP = 3, D3DTADDRESS_BORDER = 4, D3DTADDRESS_MIRRORONCE =
阅读全文
摘要:引言 如果我们希望在场景里添加一个天空,我们可以仅仅只把背景清除为淡蓝色,不过我相信你会认为那样做太普通了。一般来说,那些让你从窗户或洞孔中向外张望的室内游戏使用的是天空盒。只要使用好的纹理,天空盒将提供让人信服的画面;由于纹理伸展在一个巨大的多边形上,低质量的纹理将很容易被注意到。在户外场景中使用天空盒会引发一些问题,例如使用雾,某些雾的设置可能会引发一些问题。如果雾被设置在观察者的旁边,天空盒将减淡甚至消失。另一个可能发生的更烦人的问题是雾会聚积在天空盒的顶点处,从而将天空盒的多边形暴露无遗。下面的图1显示了在天空盒下使用雾所引发的两个问题.小心地调整雾化参数或者细分天空盒的每一个面可以.
阅读全文
摘要:稍微讲下天空盒天空盒的顶点struct SkyBoxVertex{SkyBoxVertex();SkyBoxVertex(float x, float y, float z, float u, float v);SkyBoxVertex(const D3DXVECTOR3& p, const D3DXVECTOR2& uv);D3DXVECTOR3 m_pos;D3DXVECTOR2 m_tex0;};#define D3DFVF_SKYBOX (D3DFVF_XYZ | D3DFVF_TEX1 )SkyBoxVertex::SkyBoxVertex(): m_pos(0.0f
阅读全文
摘要:原文:http://kay.zhang.blog.163.com/blog/static/3493716520084100395228/ multiAnimation是个很酷的东西。我们知道利用AnimationController可以随意的加载.x中的各种动画集。可是如果不做任何设置,只是在一个Track上切换动画集的话,就会出现动作突然变化的效果,十分不自然,比如说:当.x模型在程序中是立正的时候,我们发出命令:敬礼!他的右手手就会直接从裤缝瞬移到太阳穴,没有一个变化的过程。而我们要的效果是:我们下令敬礼 之后,他的手会从裤缝慢慢的移动到太阳穴。整个是一个连续的过程。这要怎么实现呢?其实.
阅读全文
摘要:学习啦~~~~~~原文地址:漫谈游戏中的阴影技术作者:flymemory随着硬件的越来越高端化,各种以前可望而不可及的效果越来越多的应用到网络游戏里。本篇文章是介绍目前游戏中影子的实现方式,它们的优缺点以及应用的场合。一般来说,在游戏中,应用比较多的影子技术有三种,Projective shadow, Shadow map以及Shadow map.我们接下来便依次的介绍它们。Projective Shadow投影的原理可以应用在任意贴图上就是我们通常所说的投射影子,它的实现比较简单,具体有两个步骤:1.以光源为视点,渲染有影子的物体到一张预备好的Shadow texture中。要注意的是,这里
阅读全文
摘要:名称:LOD地形演示作者:曾涛Email:zengfengtao@163.com下载:http://show.gameres.com/ztLODTerrain/ztLODTerrain.zip (执行程式+代码,2.5MB)开发环境:WIN7 VS2003 DX9.0c C++简介:这是学习LOD地形所做的一个演示程序,是根据潘李亮《largeLOD》一文中来实现的四叉树算法,当然还有Roam和其他的算法没有尝试,等空了都(马上过年了- -#)。不过对地形的层次细节与裁剪有了初步的认识。地形的高度图用的是柏林噪声生成,地图的粗糙表是预先创建的。操作说明: W S A D 控制方向,鼠标左键操.
阅读全文
摘要:仅为开发爱好者提供一些浅见,转载请注明出处。 Introduction Shader,又称着色器,是可编程的,相比过去在显卡上通过硬件hardcode流水线的方式,Shader提供了更灵活有效的解决方案,为新一代的显卡所支持,而在图形引擎中弃用固定流水线编程方式是大势所趋。对于刚刚接触Shader的同学,如何接受这种编程方式的迁移呢?回忆一下主板上BIOS程序,当我们要设置主机是从光盘优先启动还是硬盘优先启动的时候要用到它,配置好的启动信息是保存在主板的CMOS上的。固定管道编程就类似于此,只是对显卡上烧制好的一些算法做一些配置,而Shader的方式则可以使用自己Shader Progra..
阅读全文
摘要:BillBoard技术(广告版)详解!(转)今天项目里突然要用到广告版技术。闲来就去摆渡搜索一下,发现这一方面的介绍很少,所以才有了今天这篇文章,也是为了服务于新手,更为了锻炼一下自己,现在把BillBoard技术详细的介绍一下。废话不说,下面进入正题!一:定义广告版矩形顶点结构和顶点格式,具体代码如下:struct customvertrx{ float x,y,z;//顶点位置float u ,v;//定义顶点纹理坐标};#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)二:创建广告版矩形和纹理对象。//以下为创建你需要做广告版的顶..
阅读全文