IxEngine开发笔记

导航

2011年1月2日 #

第十八回 Dummies,MOPP和表格

摘要: 这回介绍的几个资源都没有太多的内容,所以就放在同一篇里了. 首先是Dummies,所谓Dummies是指多个Dummy的集合.一个Dummy通过一个名字来标识自己,它可以绑定在一个骨架系统的某一根骨骼上,并且它有一个基本的形状,通常这些形状都是些简单的几何体,比如Point,Sphere,Box,Capsule等,多个Dummy可以组成一个Dummies资源,只要它们都绑定到同一个骨架系统上.Dummies资源主要通过max导出生成,在导出时,我们会检查绑定在骨骼系统上的各个Node,如果某个Node符合Dummy的命名规则的话,我们会把它作为一个Dummy导出,记录下它的名字,以及它绑定的骨 阅读全文

posted @ 2011-01-02 23:26 ixnehc 阅读(1709) 评论(4) 推荐(1) 编辑

2010年12月25日 #

第八回 字符串库(续)

摘要: 原文在此: http://www.cnblogs.com/ixnehc/archive/2010/07/14/1777624.html 字符串库在使用中还是有些问题的. 首先是字符串库中所有的字符串都是并列的关系,没有层次,导致在字符串库中查找某个字符会很不方便.所以需要一个归类的方法,所以我们在字符串库中引入了"组"的概念,我们可以把字符串库中的某些字符串标记为"组",表示这个字符串代表一个组,然后就可以为库里的其它字符串指定它们属于哪些组,像这样: 目前一个字符串可以属于多个组.组也可以属于另一个组 原文中提到过,当我们需要编辑一个字符串ID的值时,我们会为它指定一个语义,语义有两部分 阅读全文

posted @ 2010-12-25 10:20 ixnehc 阅读(1493) 评论(0) 推荐(0) 编辑

2010年12月23日 #

第十七回 路径动画

摘要: 这回介绍另一个资源: 路径动画资源 路径动画资源的内容很简单,只不过是一系列旋转和位移的关键帧而已.比较麻烦的是它的生成过程. 最简单的方法是由美术在max里制作完毕后,导出为一个资源文件.这个很简单,就不多说了. 但是max不能解决所有问题,有时候我们会需要一条对场景依赖性非常高的路径,比如说沿着场景里的某根柱子绕三圈,然后再从边上的一座桥的桥洞中穿过.最后停留在某个高大雄伟的建筑的门前,诸如此类.这样的路径通常可以在一些剧情演出中用于控制Camera的走位.也可以在一些大型特效中控制粒子的轨迹,还是很有实用价值的.而对于这样的路径动画,max制作起来就比较吃力了,我们需要一个内嵌在世界编辑 阅读全文

posted @ 2010-12-23 22:40 ixnehc 阅读(2797) 评论(2) 推荐(3) 编辑

2010年12月12日 #

第十六回 骨骼动画

摘要: 这回介绍另一种资源:骨骼动画.这部分主要是由我的同事写的.不过大致我也了解一些,所以在这里介绍一下. 一个骨骼动画资源会包含多个动画序列,我们叫它AnimPiece(这名字有点土).每一段AnimPiece通常相当于一个角色的动作.一个AnimPiece包括: 1.一个名字,使用字符串ID表示 2.骨骼的关键帧信息,存储格式见下图: (挺象一张吉他谱吧,不错的旋律) 3.事件信息,一个AnimPiece可以包含多个事件,每个事件有一个名字(字符串ID)和一个时间.在播放动画到这个时间时会发出这个事件,外部可以响应这个事件做一些事情. 骨骼动画数据的内容并不复杂.不过它的生成方式还是有点麻烦 阅读全文

posted @ 2010-12-12 12:21 ixnehc 阅读(3652) 评论(3) 推荐(1) 编辑

2010年12月5日 #

第十五回 AnimTree

摘要: 这回介绍AnimTree(动画树)资源,这个是今年(2010年)夏天写的,相对于之前介绍的几个布满灰尘的资源,这个资源算是蛮新的了.  使用过Unreal引擎的同学肯定知道AnimTree这个东西了,我觉得这玩意绝对是个天才的发明,因为我在知道AnimTree之前,也考虑过一些方法来解决角色动画的控制问题,但比起AnimTree来说,那些方法都显得太丑陋了.所以,借鉴于Unreal,我自己也实现了一套类似的系统.  按照我的理解,动画树是一套用图形化的方式,根据一些逻辑状态来表现动画效果的系统.它也是一套典型的组件化的系统(图形化+组件化,这很对我的胃口),借助于这套系统,控制动画变得简单了: 阅读全文

posted @ 2010-12-05 15:33 ixnehc 阅读(4343) 评论(7) 推荐(2) 编辑

2010年11月28日 #

第十四回 Mesh

摘要: 这回说说Mesh,Mesh是又一种最基本的资源,说到基本资源,引擎中目前还有些更为基本的资源,比如ITexture,IVertexBuffer,IIndexBuffer,ISurface,这些基本是对D3D9提供的资源的封装,这里就不多说了.Mesh资源里包含的东西有些杂乱,有:1). 一个aabb,表示这个mesh所有顶点的包围盒(当然是在局部空间里的)2). 顶点中包含的骨骼权重的个数,也就是... 阅读全文

posted @ 2010-11-28 13:46 ixnehc 阅读(2838) 评论(0) 推荐(2) 编辑

2010年9月15日 #

第十三回 顶点格式

摘要: 这一回介绍一下一个自定义的顶点描述格式: FVFEx。 最早D3D是用FVF来描述一个vertex buffer里的顶点格式的,因为那时候的顶点中的element的类型就那么几种,可以写成固定的形式,但是后来D3D为了允许用户自己定义顶点的element类型,采用了非常难用的vertex declaration来定义一个vb的顶点格式,当然这也没有办法,D3D毕竟要考虑所有用户的需求.不过,在我看... 阅读全文

posted @ 2010-09-15 23:25 ixnehc 阅读(2215) 评论(0) 推荐(1) 编辑

2010年8月25日 #

第十二回 关于Shader和材质

摘要: 这回的内容估计比较杂乱一些,因为都是些零碎的东西. 上回关于Shader组合的文章发到论坛上后,很多人都说可以用静态分支的方式来解决Shader组合爆炸的问题,比较让我惭愧的是,那时候我连静态分支是什么都不知道.Google了一下才知道,所谓的静态分支原来是指shader在正式运行前,可以把该怎么分支预先计算出来,然后在所有的后续计算中都统一按照这种分支来走计算流程.好像要SM3.0以上才能支持.... 阅读全文

posted @ 2010-08-25 22:07 ixnehc 阅读(3220) 评论(3) 推荐(2) 编辑

2010年8月19日 #

第四回 关于多线程渲染(续--测试数据)

摘要: 多线程渲染模块自从写完后就一直放在那,没有用过,当时也没有大规模的场景可以测试.这两天终于把这堆被屏蔽掉的代码又激活了,并在一个规模比较大的场景中测了测.下面是一些测试数据: 测试场景,如下图:     这个场景大约使用了2000次左右的DrawCall.大部分模型使用diffusemap+lightmap绘制,少部分有法线贴图和高光贴图.没有很复杂的PixelShader.Render Targ... 阅读全文

posted @ 2010-08-19 23:08 ixnehc 阅读(2175) 评论(2) 推荐(0) 编辑

2010年8月8日 #

第十一回 Shader的动态组合

摘要: Shader是很奇怪的代码,它的长度受到限制,它的动态分支能力很弱,它的指令很昂贵,这些都使得你很难使用一个单一的Shader来处理所有的渲染要求.而各种渲染要求的种类如此之多,如果要为每一种渲染类型都写一段专一的代码的话,那会是一件非常吃力的活,假设我们现在要写一个材质系统,我们希望它能够支持各种效果.你会发现随着支持的效果越来越多,需要写的Shader的数量会急剧上升,比如:  *.一开始我们... 阅读全文

posted @ 2010-08-08 23:18 ixnehc 阅读(3164) 评论(1) 推荐(4) 编辑

2010年7月26日 #

第十回 资源管理

摘要: 所有的关于Engine的介绍都会说到资源管理,我也来说说我们的,其实也没什么太新鲜的东西,因为大家写得都差不多. 目前engine中大约有十几种资源类型,比较重要的有vb/ib,texture,shader,mesh,material,animation等,除了vb/ib外,大多数资源的数据都是由各种外部工具生成的,保存在硬盘上,每一个资源保存为一个文件,根据后缀名表示它是什么类型的资源,比如me... 阅读全文

posted @ 2010-07-26 22:17 ixnehc 阅读(960) 评论(1) 推荐(1) 编辑

2010年7月19日 #

第九回 Stub

摘要: 我不知道它有没有专门的名称,在engine里,我叫它Stub,所谓Stub是指一个对象暴露出来和外界联系的接口,它分为两种,signal和slot,熟悉Qt的朋友肯定立即就会知道这是什么东西了,事实上这个东西我也是从Qt里借鉴过来的,只是我的实现方法和它不一样罢了.一个对象在它需要的时候可以发出各种事件,称为signal,也可以通过slot接受来自外界的事件,每个signal和slot都有一个名字... 阅读全文

posted @ 2010-07-19 23:01 ixnehc 阅读(1315) 评论(0) 推荐(1) 编辑

2010年7月14日 #

第八回 字符串库

摘要: 第八回 字符串库  游戏开发中会大量用到字符串,最普通的就是游戏界面上的各种文字了(比如按钮上的文字),还有就是在开发过程中编辑器的用户会编辑各种各样的游戏对象,通常都会为这些游戏对象起一个直观的名字,这样在用到这些对象时,可以很方便的标识它们.还有一些类似于xml标签的字符串,可以用来定义一些格式,(比如<Font:12,Color:255,0,255>,用来描述一种字体格式).用户... 阅读全文

posted @ 2010-07-14 22:45 ixnehc 阅读(988) 评论(0) 推荐(2) 编辑

2010年7月10日 #

第七回 文件系统

摘要: 好长好长时间没有更新了,主要还是因为太懒,写这么一篇文章往往要花几个小时的时间,有时候要配图,有时候要配代码,感觉比较累,真佩服那些随随便便就能写一大堆的家伙们. 不过既然开始,就要继续.这篇文章写写引擎中用到的文件系统, engine之所以需要一个文件系统的原因,最主要的是因为游戏发布的时候需要把游戏数据打包,一个大型的游戏的文件个数可能达到几万甚至十万以上,这么多文件无论安装还是卸载都会很慢,... 阅读全文

posted @ 2010-07-10 18:37 ixnehc 阅读(1055) 评论(0) 推荐(0) 编辑

2008年12月1日 #

第六回 使用数值曲线表示动画

摘要: 这一阵子在写关于角色行为控制的东西,这首先离不开一套动画更新机制。 所谓动画,可以看作是一根随着时间变化的数值曲线,要描述一根曲线有很多种方法,最普通的可能就是用一个数学公式来描述,比如说sin曲线,不过在互动性很强的游戏里,曲线往往不会那么理想化的简单,通常需要由很多参数来控制。比如说一个角色沿着一条路径在走的时候,它的空间坐标就是在一根曲线上,这根曲线由一系列控制点以及一个控制方式... 阅读全文

posted @ 2008-12-01 21:22 ixnehc 阅读(3168) 评论(3) 推荐(0) 编辑

2008年9月15日 #

第五回 对象描述信息(Object Description)--使对象使用起来更方便

摘要: 一个c++项目里会使用各种各样的对象,但对象的使用往往并不是件轻松的事,当用一个c++类去封装一个对象的时候,程序员往往要做以下这些事 *.对象的成员变量的初始化,一般在构造函数里实现 *.对象的内容的清除,一般在析构函数里实现 *.对象的复制,把一个对象赋值给另一个对象,一般要实现一个operator =(..) *.对象的比较,最常用的比较就是比较两个对象的内容是否一样了... 阅读全文

posted @ 2008-09-15 02:18 ixnehc 阅读(1823) 评论(2) 推荐(1) 编辑

2008年9月4日 #

第四回 关于多线程渲染

摘要: 困扰了一个多月的问题,今天终于有个阶段性的了结了,虽然不知道算不算真正的了结. 多核的cpu现在是大势所趋,渲染是一个很费时的活,所以应该考虑考虑能不能利用多核来提升这部分的性能.引擎一开始没有在多线程方面作任何的考虑,因为我从来就不喜欢多线程,这方面的思考能力不强,而且一开始写个单线程的engine已经够费事了,要加入多线程的设计对我来说实在是太难了.但是在积累了这么多时间的... 阅读全文

posted @ 2008-09-04 22:05 ixnehc 阅读(6497) 评论(14) 推荐(3) 编辑

2008年9月3日 #

第三回 运行时类信息(Runtime Class Information)

摘要: 刚开始学习MFC的时候,就碰到有关于RunTime Class Info的东西,可以在运行时得知一个对象的指针到底是什么类型的.当时并没有深入研究,用得也不多,只是觉得挺神奇的.而在这个engine的开发过程 中,才渐渐觉得这是个好东西了.我在engine里实现了一套这样的系统,用着还蛮顺手的,在这里介绍一下. 基本上这套系统(Runtime Class Information System,暂... 阅读全文

posted @ 2008-09-03 20:39 ixnehc 阅读(2176) 评论(2) 推荐(1) 编辑

2008年9月2日 #

第二回 关于vector和deque

摘要: vector是我最早用的stl容器,用得也最顺手,它的结构也是清晰易懂.deque就比较神秘一些,帮助上提到它的一个最显著的特点就是可以从容器的 前端插入成员,而且效率很高.当时觉得很神奇,不知道是怎么做的.stl的源代码看起来太痛苦了,所以到今天也没准确的了解它的结构.不过后来用的多了, 对它的习性也有了一定的了解,有些地方相对于vector来说其实是很有优势的.下面就把两者对比... 阅读全文

posted @ 2008-09-02 21:03 ixnehc 阅读(3491) 评论(8) 推荐(0) 编辑

第一回 开篇 D3D渲染流程简介

摘要: 开发这个3D engine已经两年半了,从06年8月刚开始统计的4万多行,到今年7月份的21万多行,有一些感慨,感觉有那么点成就感,不过更多的是惴惴之 心:这些代码可以很好的在一起工作吗,足够快吗?bug肯定不少,因为测试的强度毕竟不高,这还不是最重要,架构上会不会有致命的疏忽的地方?会不会在未 知的需求面前不堪一击?前些日子看了看两年前写的代码,觉得不满意的地方很多,代码写出来的一... 阅读全文

posted @ 2008-09-02 20:53 ixnehc 阅读(5434) 评论(15) 推荐(1) 编辑