游戏人生

不积跬步,无以至千里;不积小流,无以成江海。

导航

2013年5月9日 #

引擎设计跟踪(九.5) 骨骼蒙皮动画预研

摘要: 最近看了骨骼蒙皮的细节,之前只了解大致原理:用场景图类似的级联层次结构,组织骨骼的框架运行时根据骨骼的空间参数(旋转,位移,缩放)计算蒙皮顶点.基本原理使用级联(父子)层次关系的好处就是能够方便反应真实的情况: 手臂运动时,手掌和手指会跟着运动(这个需要没帧在CPU端计算骨骼树上的所有最终变换).骨... 阅读全文

posted @ 2013-05-09 12:33 crazii 阅读(866) 评论(3) 推荐(0) 编辑

2013年5月3日 #

引擎设计跟踪(九.3) 多视图:基本工具菜单完成

摘要: 基本功能在51前已经做好,因为放假出去,所以没来得及更新.底层支持1.多视口功能的底层支持, 添加了2种方案,A) Present到另外一个窗口B) 多SwapchainC)为什么不使用D3D的viewport?感觉那个功能太简单,不满足复杂的需求(除非自己补充功能),感觉swap chain比较满足当前的情况.当然,google了一下发现了等价的OGL(扩展)实现,所以可以封装.第一种方法使用一个桌面(全屏)大小的共享backbuffer,present到不同的窗口, 要计算源矩形区域第二种因为使用D3D的swap chain,相对简单,但是根据d3d sdk每个swapchain都有自己的 阅读全文

posted @ 2013-05-03 01:09 crazii 阅读(353) 评论(0) 推荐(0) 编辑

2013年4月22日 #

引擎设计跟踪(九.3) 3DS MAX 导出插件 小总结

摘要: 最近主要工作:主要在调试材质LOD, 因为材质LOD的框架已经有了,地形里面测试过,但是因为地形里面的贴图都是预载并且处理过的,不需要运行时加载贴图.所以LOD切换后,加载/卸载贴图的部分没有测试,这次借这个机会测试并且完善了材质LOD系统.需要注意的一点是,模型在最初加载的时候,只加载diffuse贴图, 后面的贴图加载,就交给材质LOD系统了.因为导出的是MAX的标准材质,所以diffuse,normal各种类型都是知道的,所以导出这些信息难度不大.另外研究了一下高光贴图,高光贴图有3种: specular level,specular color , specular gloss第一种是 阅读全文

posted @ 2013-04-22 02:31 crazii 阅读(657) 评论(0) 推荐(0) 编辑

2013年4月18日 #

引擎设计跟踪(九.2) 3DS MAX 导出插件 继续

摘要: 先分享一个autodesk的导出教程文档http://images.autodesk.com/adsk/files/3ds_max_game_export_programming_guide.doc记录一下遇到的几个问题:1.导出空间的问题.IGameMesh::GetVertex() 可以选择导出对象空间还是世界空间的坐标.本来以为对象空间是正确的选择.后来发现,"对象空间"是指单个Node的对象空间,所以渲染出来的身体部件散乱分部在原点附近...2.UV坐标的问题. //coordinates IGameConversionManager* cm = GetConver 阅读全文

posted @ 2013-04-18 18:01 crazii 阅读(858) 评论(0) 推荐(0) 编辑

2013年4月3日 #

引擎设计跟踪(九) 3DS MAX 导出插件

摘要: 1. SDK和工程配置的什么的就不多说了,安装完SDK并且把工程模板复制到VC文件夹里,就可以根据模板创建工程了.2.Ogre的导出插件为了学习Ogre的MAX导出,下了最新的Ogre, v1.81大概.对Ogre的导出感到很好奇, 他好像没有直接导出二进制,而是导出了xml,据说有另外的命令行工具把xml转成二进制.还有,Ogre的官方插件, 把所有三角形共享的顶点都重复了一次,也就是说,每个三角形都有自己唯一的顶点,按它文档说明,这是为了处理多维材质时,一个顶点有不同uv和法线,材质等属性的问题, 但是我觉得只需要复制重叠的边缘顶点就可以了,而且即便是重复每个顶点,我记得Ogre的Mesh 阅读全文

posted @ 2013-04-03 11:50 crazii 阅读(1220) 评论(4) 推荐(0) 编辑

2013年3月24日 #

引擎设计跟踪(八) Mile stone 2 准备中

摘要: 因为之前业余时间太累了,目前主要还是休息,所以现在放慢节奏写点东西.目前已经把3DS MAX的SDK环境搭好, 用它自带的模板创建了solution,已经加到在MAX里面了,引擎的Model插件也着手编写,目前一边熟悉MAX SDK,一边添加Mode插件中模型保存/加载需要的接口.遇到一个问题就是, MAX导出插件也依赖引擎的基础DLL,把导出插件放到$(ADSK_3DSMAX_x86_2013)\plugins 中以后,把引擎的基础DLL放到这个$(ADSK_3DSMAX_x86_2013)\plugins中,MAX加载它会失败,估计是DLL SEARCH PATH问题,把引擎的基础DLL放 阅读全文

posted @ 2013-03-24 15:18 crazii 阅读(374) 评论(0) 推荐(0) 编辑

2013年3月14日 #

引擎设计跟踪(七) Mile sone 1: terrain 基本完成

摘要: 最近最大的工作是添加Atlas多贴图支持,使一个大块地形即可以支持更多的贴图,又可以通过一个Drawcall绘制另外一个工作是地形的保存和加载, 这个虽然很早已经完成,但最近在完善框架的Enitty加载和Stage加载.同时把地形的加载集成到框架里面.Entity和Stage使用同一种加载方式, 并且加入了XML的方式.之前只有Stage的binary方式.现在可以判断格式并选择对应的解析器.(第一行的注释就是标记).基础框架方面主要是添加了编辑器的PropertyGrid,其实用的还是以前的UI,主要是实现了对象的数据绑定.另外一个大的工作是窗口布局的完善: 以前的窗口虽然分了Panel,但 阅读全文

posted @ 2013-03-14 23:55 crazii 阅读(514) 评论(7) 推荐(0) 编辑

2012年9月5日 #

[转] Peter Norvig:自学编程,十年磨一剑(节选)

摘要: 研究人员(Bloom (1985)、 Bryan & Harter (1899,见文后参考书目)、Hayes (1989)、Simmon & Chase (1973,见文后参考书目) 的一系列调查研究显示,在各个领域内,要想获得专业级别的水平,大约需要10年时间的努力。参与此项调查的领域包括:国际象棋,作曲,发报,绘画,钢琴演 奏,游泳,网球等。科学家们从神经心理学和拓扑学的角度对这些领域进行研究,并得出结论。若要在某一领域内达到专家级的水平,其关键在于“审慎地重复”, 也就是说,并非是机械地,一遍又一遍地练习,而是要不断地挑战自我,试图超越自身当前的水平,通过不断的尝试挑战, 阅读全文

posted @ 2012-09-05 10:26 crazii 阅读(270) 评论(0) 推荐(0) 编辑

2012年3月10日 #

引擎设计跟踪(六.2)

摘要: 晚上睡不着觉,很早起来.因为很久没有做业余学习了,发个引擎的依赖层次图,算是自勉吧,有空了坚持搞搞.图是以前做的,不怎么会UML.现在的代码设计结构有了细微的修改,跟图中的不太一样.no more crap, just see the graph belowref:http://software.intel.com/en-us/articles/designing-the-framework-of-a-parallel-game-engine/主要参考了上面的文章来实现的.呵呵.我觉得文章的大思路很不错,不过我实现的细节地方不太一样,特别是游戏对象,和并行状态更新的部分.有空了详细做个笔记,写 阅读全文

posted @ 2012-03-10 07:54 crazii 阅读(384) 评论(0) 推荐(0) 编辑

2011年11月24日 #

引擎设计跟踪(六)

摘要: terrain atlas貌似不能使用volme texture depth decal. 阅读全文

posted @ 2011-11-24 09:38 crazii 阅读(260) 评论(0) 推荐(0) 编辑

2011年9月11日 #

引擎设计跟踪(五)

摘要: 最近主要的更新:媒体库(MediaLibrary),集成FreeImage地形高度画刷,地形贴图画刷,地形法线计算,天空球,光源以上支持无缝编辑.另外,写了命令行参数解析以及Editor的Splash,纯当作消遣娱乐了,呵呵.关于媒体库:类似UE的Contetn Brower,当然比它要简陋的多了.呵呵.MediaLibrary的窗口可以使用两种方式:模态窗口和非模态窗口.非模态窗口就像UE那中模式,显示的时候不抢占前台,不影响其他操作,而且运行时不需要重复构建窗体,缺点是需要额外的通信,比如拖动项目到目标窗口(UE的模式)模态窗口就相反,好处是do-modal 之后就可以返回选择的结果,避免 阅读全文

posted @ 2011-09-11 20:55 crazii 阅读(716) 评论(4) 推荐(0) 编辑

2011年8月20日 #

引擎设计跟踪(四)

摘要: 最近主要目标是做地形画刷.但是准备工作太多,只能一步一步来.目前加上了射线查询和地形的三角形集合的相交查询,主要是为了做贴花,这个是画刷显示的时候必须有的东西.关于地形的贴花,可以一直multipass,再画一遍,加上depthbias,使用画刷贴图做纹理投影就可以了,比如Ogre的Ogitor就是这么做的,这样搞对于编辑器没什么问题,足够了.但是对于游戏中使用的贴花来说,最少要一个地形块多渲染一次,感觉太耗了.所以才想用地形三角面查询,只绘制需要的少量三角形就可以了,这对于游戏(而非编辑器)来说更好点.至于射线查询,由于有了空间管理,所以找到与射线相交的三角形和点不难.而三角形集合相交的查询 阅读全文

posted @ 2011-08-20 02:26 crazii 阅读(602) 评论(11) 推荐(0) 编辑

2011年5月23日 #

引擎设计跟踪(三)

摘要: 编辑器UI的设计 阅读全文

posted @ 2011-05-23 23:34 crazii 阅读(700) 评论(0) 推荐(0) 编辑

2011年5月16日 #

DX9的窗口关闭了,设备依然有效

摘要: 最近在做多窗口渲染.说说我遇到的情况首先DX9Device是根据一个窗口(比如D3DPRESENT_PARAMETERS里面的hDeviceWindow)创建的,创建的时候必须制定一个窗口,否则创建失败.但诡异的是,当我关闭了这个窗口之后,渲染设备竟然依然有效(但为什么创建设备的时候非要一个HWND呢,很奇怪,求达人解惑,这个跟DX的Foreground window和焦点有关么?),而且我可以继续创建swapchain,继续多窗口渲染.甚至可以用新窗口,来复用 已经关闭窗口的那个隐式的Swapchian和Backbuffer,就是设备创建的时候带的那个,不过我这时用的是swapchain的p 阅读全文

posted @ 2011-05-16 01:49 crazii 阅读(543) 评论(0) 推荐(0) 编辑

2011年5月15日 #

地形法线贴图的优化

摘要: 法线贴图有两种格式, 可保存在Tangent Space或Object Space.保存在切线空间的好处是渲染对象无论怎么旋转,都可以得到正确的法线信息, 通常的法线也都保存在切空间.它的缺点是, 在渲染时需要进行空间变换,有额外的开销. 比如将法线从切线空间变换到世界空间, 从而根据世界空间的光照... 阅读全文

posted @ 2011-05-15 09:57 crazii 阅读(1496) 评论(10) 推荐(0) 编辑

2010年6月18日 #

引擎设计跟踪(二)

摘要: 配置参数和配置界面的分离 阅读全文

posted @ 2010-06-18 10:21 crazii 阅读(624) 评论(1) 推荐(0) 编辑

2010年6月9日 #

CEGUI 的渲染优化

摘要: 前两天同事跟我说了下CEGUI的字体优化,主要思路是它一次创建了256个字的纹理,太慢太浪费。改成单个字的删格化就好了。另外我考虑到0-255这些ASCII字符的使用频率,就单独把这一页的字符一次性创建出来了。呵呵。今天做好了,今天他又说到了渲染优化方法。原理很单,就是不用每帧都渲染UI,把它单放到一个BackBuffer里面,类似windows的invalidate 和paint,如果UI系统不... 阅读全文

posted @ 2010-06-09 11:52 crazii 阅读(790) 评论(0) 推荐(0) 编辑

2010年5月27日 #

[转]3D图形渲染通道负载优化的几种方法

摘要: 一般来说, 定位渲染通道瓶颈的方法就是改变渲染通道每个步骤的工作量, 如果吞吐量也改变了, 那个步骤就是瓶颈. 找到了瓶颈就要想办法消除瓶颈, 可以减少该步骤的工作量, 增加其他步骤的工作量. 一般在光栅化之前的瓶颈称作”transform bound”, 三角形设置处理后的瓶颈称作”fill bound” 定位瓶颈的办法 1. 改变帧缓冲或者渲染目... 阅读全文

posted @ 2010-05-27 14:03 crazii 阅读(621) 评论(0) 推荐(0) 编辑

[转]D3DCREATE_PUREDEVICE

摘要: What is the purpose of the D3DCREATE_PUREDEVICE flag?D3DCREATE_PUREDEVICE 标记的作用是什么?Use the D3DCREATE_PUREDEVICE flag during device creation to create a pure device. A pure device does not save the cur... 阅读全文

posted @ 2010-05-27 12:11 crazii 阅读(891) 评论(0) 推荐(0) 编辑

2010年5月25日 #

MFC内存泄露报告

摘要: 在加入了CEGUI之后,编辑器的MFC推退出时报了一大堆内存泄露.目前模块架构是这样 客户端和编辑器共享一个SharedDLL,CEGUI的dll连接在这个DLL中.问题是在编辑器根本没有调用CEGUI的初始化,何来的内存泄露呢,最后我想到了,是CEGUI中的静态变量,(很多static const String)分配的内存.他的内存分配模式显然跟MFC自己的不一样.而DLL的卸载顺序是MFCDL... 阅读全文

posted @ 2010-05-25 18:18 crazii 阅读(667) 评论(0) 推荐(0) 编辑

2010年5月24日 #

编辑器框架的思考

摘要: 为了将UI逻辑和编辑逻辑分离,我考虑一下方法:1.UI使用脚本控制2.抽象接口第一种的话,可能本身实现也比较复杂,没一种UI都要实现脚本支持,可能需要自己写实现.而且,我以前看到的一片老外文章说引擎本身不提供脚本功能.呵呵,可能意思是到了游戏逻辑的时候才考虑脚本,这篇文章可以在GameRes上找到.第二种,关键问题是如何做接口:A 定义成最小接口的单独UI控件B 抽象出编辑器需要的特定功能A方案象... 阅读全文

posted @ 2010-05-24 18:36 crazii 阅读(503) 评论(0) 推荐(0) 编辑

解决UI拦截游戏输入

摘要: 以前做项目的时候,因为没有经验,发现UI焦点和游戏控制总是发生冲突.只是当时没有考虑到这一点.现在做这个项目,有经验的大哥首先就能想到这一点并且说应该怎么做.呵呵,有经验的确实不一样啊. 现在实现GB里面的UI拦截,我的实现方法是给NiInputDI8Keyboard和NiInputDI8Mouse加入CallBackObject,这样就可以把键盘事件注入CEGUI.同时可以加上事件拦截,通过回调... 阅读全文

posted @ 2010-05-24 18:15 crazii 阅读(325) 评论(0) 推荐(0) 编辑

Gamebyro 加入CEGUI

摘要: 最近的工作是把CEGUI加入GB,刚开始使用CEGUI默认的渲染器,因为不受GB的RenderState控制,所以影响到其他的渲染过程.后来改成GB的RenderState控制,UI没有了(可以看到刚开始闪了一下).经过同事的帮忙调试,最后发现是SetFVF的问题.因为其他地方还没有用到直接设置FVF的,所以在设置了一次之后,以后的设置都无效了,GB判断跟当前FVF设置一样,所以跳过了.但是设备的... 阅读全文

posted @ 2010-05-24 18:06 crazii 阅读(368) 评论(0) 推荐(0) 编辑

2010年5月21日 #

引擎设计跟踪(一)

摘要: 目前整个架构基本上完成了,以后的重点放在图形系统(Graphics System)和资源管理器(ResourceManager)上.对于图形系统,准备下一步完善一下材质系统的抽象,并实现一套默认材质方案和渲染方案.底层的渲染设备也需要进一步完善接口,添加渲染状态设置.材质系统的实现,我打算先使用固定管线,shader的抽象还没有做,等以后有时间再做.大致思路:使用XML配置材质脚本,方便的实现材质... 阅读全文

posted @ 2010-05-21 09:31 crazii 阅读(623) 评论(0) 推荐(0) 编辑

2010年5月17日 #

LOD地形的注意事项

摘要: 地形LOD 阅读全文

posted @ 2010-05-17 13:33 crazii 阅读(592) 评论(8) 推荐(0) 编辑

Abstract/Interface Singleton

摘要: 抽象的Singleton模式 阅读全文

posted @ 2010-05-17 13:08 crazii 阅读(567) 评论(0) 推荐(0) 编辑

2010年4月23日 #

开播庆祝

摘要: I wanna be a designer,not just a coder. 阅读全文

posted @ 2010-04-23 11:34 crazii 阅读(317) 评论(1) 推荐(0) 编辑