平民程序 - linghuye's blog

天下风云出我辈,一入江湖岁月催。皇图霸业谈笑中,不胜人生一场醉。提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只笑江湖几人回。

随笔 - 221, 文章 - 0, 评论 - 680, 引用 - 0
数据加载中……

FreeType备忘笔记

当初都已解决的问题,又都想不起来是怎么解决的,真是烦,非得记下来不可.
1.主工程为: Freetype_2.1\builds\win32\visualc\freetype.sln.
2.建个主工程的快捷方式到Freetype_2.1\下.
3.默认Release的配置为MD,Release Multithreaded为MT, 编译Release Multithreaded的版本,编译,过.
4.生成的文件在Freetype_2.1\objs下.
5.修改sln工程方案中的ftmodule.h,改为仅支持Windows TrueType子体,屏蔽对其他字体(Linux,mac等杂七杂八的)的支持,仅保留:
   FT_USE_MODULE(tt_driver_class)
   FT_USE_MODULE(sfnt_module_class)
   FT_USE_MODULE(ft_smooth_renderer_class)
注释要用/**/,不要用//,因为这个是c源码程序.
6.修改ftoption.h,屏蔽如下定义(仅支持TrueType不要这些定义)
   #define FT_CONFIG_OPTION_USE_LZW
   #define FT_CONFIG_OPTION_USE_ZLIB
   #define FT_CONFIG_OPTION_MAC_FONTS
7.FTGL主工程为FTGL_2.1\win32_vcpp\ftgl.sln,打开,设置ftgl_static_lib的include目录到Freetype_2.1\include.
8.编译ftlgl_static_lib的MT版本,生成的静态库在FTGL_2.1\win32_vcpp\build下.

posted @ 2005-09-04 22:56 linghuye 阅读(999) | 评论 (2)编辑 收藏

程序开发目录Idiom

1.程序执行目录Env,Bin,Release,除子目录外不得出现非执行程序文件.要支持Debug版本与Release版本混合运行.
2.程序配置文件Cnfg
3.程序数据文件Data
4.文档Docs
5.错误日志Logs
6.输出文件Output
7.截屏Screenshots
8.中间文件Objs\Debug,Objs\Release
9.各组合工程平行与Release目录
10.代码文件名为小写,型如lt_object.h.

posted @ 2005-09-04 14:22 linghuye 阅读(283) | 评论 (0)编辑 收藏

魔兽世界的碰撞检测方案推测

1.花花草草,灌木丛,片状树叶,布幅等等不作碰撞检测(实际上是由模型的数据定义,模型若不定义Polygon soup则该模型无碰撞检测).
2.可移动的玩家,NPC,Mobs之间不作碰撞检测(出于游戏设计和服务器性能考虑).
3.地形系统上的碰撞检测:可基于高度图实现.人站立在地形三角片的插值高度点上,若行走坡度太陡(从一个三角片到另一个相邻的三角片)则禁止行走.由于地形本质是基于等分的2维网格,很容易从人的平面位置算出所处网格位置,从而得到该网格处的地形高度,进而精确地计算所站立的三角片的点高度.
4.野外场景: 由角色所处的512*512的MapArea始,采用4叉树包围球/包围盒层次裁减该MapArea内的物体.
5.室内场景: 由角色所处的BSP节点开始,采用BSP层次裁减该Portal内的物体.(室内场景处理技术在Camac手里基本已成定型).
6.角色周围可能的碰撞物体: 先作OBB包围盒粗略检测,然后是 Polygon soup 精确的三角片对人物圆柱体碰撞检测,这样角色才可以站在凹凸不平的投石车上,可以走在桥面上,可以跳到船舱面上,可以进入类电梯的内凹物体(游戏编程精粹1有文讲述三角片碰撞).
7.模型的Polygon soup是简化的物理模型形状.
8.AI寻路基于地形三角片?方形网格!?BSP的portal?


9.此间台风大作,呼啸肆意,书以记之.

posted @ 2005-09-01 22:21 linghuye 阅读(3776) | 评论 (14)编辑 收藏

程序的自由

因原单位待遇不好,本人下岗已久。现欲开辟第二职业,有意者来电来函咨询,本人承接以下业务:苦力搬运,装卸,车工,钳工,焊工,水电工,瓦工,砸墙,砌墙,筛沙,油漆,通下水道,贴瓷砖,室内装璜,VB,C++,.NET,C#,Java,j2ee,j2me,asp,delphi,汇编,PC&手机&网络游戏开发,3D游戏引擎设计开发,网络维护管理,3维建模,照片上色,平面设计,建筑效果图,flash动画,硬件设计,单片机开发, 四六级替考,办证,黑枪,黑车,暗杀,洗钱,要债,割双眼皮,修复处女膜…
另:本人长期代写小学生寒,暑假作业.替小学生欺负其他同学(限制5-10岁以内)有意者狂密我.价钱好商量.......  

Solo King,人才啊,笑完后觉得工作后的4年,我对天天上班的生活已然感觉极度的厌恶,一种对自由的渴望由心底涌出,不可遏抑,恶魔在向我招手,愿我再次坠入那深渊.

我厌恶这种感觉,仿佛没有了这天天上班的工作,我就不名一文了,妈的领自己挣的住房公积金都他妈要审批,我厌恶这种没有自由的感觉,没有自由的程序员,写出来的都是垃圾代码.

今天的我,回首以往那些痛苦的挣扎,真想回到过去和孤苦彷徨的自己谈谈,传授一下知识,指引一下方向,拍拍自己的肩膀,说一声,"哥们,有你的.",让自己知道不要让一时的彷徨无着阻止自己的前进.

立此存证.

/*Beyond 谁伴我闯荡*/
前面是哪方
谁伴我闯荡
沿路没有指引
若我走上又是窄巷
寻梦像扑火
谁共我疯狂
长夜渐觉冰冻
但我只有尽量去躲
几多天真的理想
几多找到是颓丧
沉默去迎失望
几多心中创伤
只有淡忘
从前话说要如何
其实你与昨日的我
活到今天变化甚多
只有顽强
明日路纵会更彷徨
疲倦惯了再没感觉
别再可惜计较什么
始终上路过
谁愿夜探访
留在我身旁
陪伴渡过黑暗
为我驱散寂寞痛楚
寻觅没结果
谁伴我闯荡
期望暴雨飘去
便会冲破命运困锁

posted @ 2005-08-25 11:08 linghuye 阅读(465) | 评论 (2)编辑 收藏

LithTech的模型系统概念接口设计

IBase->ILTModel->ILTModelClient,这个接口体系是设计来提供给GameCode使用的,GameCode是EngineCode的Client.
但这里的ILTModel不能理解为1个Model概念的抽象.LithTech将所有的EngineObject抽象成一个HOBJECT句柄交给GameCode,而不是抽象成接口对象.而这里的ILTModel接口实际起着函数空间namespace的作用,将Flat函数空间转成有层次的命名函数空间,ILTModel interface contains functions for manipulating models and animations.
ILTModel的实现类没有成员变量,因此它的接口方法接受一个HOBJECT hObj,这是一个之前由Engine传出的ModelInstance对象.HOBJECT定义是LTObject*, ModelInstance继承于LTObject,所以ModelInstance是HOBJECT.ILTModel的实现类将HOBJECT强转成ModelInstance以获得实际操作的目标.
所以,ILTModel作为模型函数族接口,代理处理有关Model型HOBJECT的业务,此后代码流转入CLTModelClient的实现,再转入ModelInstance.

WorldTreeObj->LTObject->ModelInstance,场景图中的EngineObject继承于LTObject,这样ModelInstance作为一个独立的EngineObject,有着自己的位置/大小/骨骼动画控制状态成员变量等.很明显,我们不能也不用为每个ModelInstance存储基本的模型物理数据(如顶点数据等),所以其必然使用一个Model*数据,以得到不变的Model的物理模型数据.实现上,ModelInstance将这个指针放在成员变量m_AnimTracker内,使用GetModelDB取出.

Model & ModelNode: 这里的Model表达出一个物理上的模型的概念(物理图形数据),我们定义这种概念为Data Base.多个ModelInstance会使用或指向同一个的Model,她们之间是使用关系.那么,Model不应该拥有游戏环境属性数据(如位置,朝向及与游戏环境相关的数据),只应该拥有自身的物理图形自然数据.
Model模型数据本身也应该是一棵树,她使用ModelNode结构数组加指针子树,来管理模型的树型坐标系统.ModelSocket是模型绑定口,其他的Model可以绑定到Socket上以形成复合模型,ModelSocket绑到1个ModelNode上,完成概念上的统一.但ModelSocket不同于ModelNode,ModelSocket有自身更高级的模型绑定概念数据要维护.

Model包含m_StringList,一个单向ModelStringList链表,以存储并维护Model所载入的字符串数据,这样存储块明晰且节约空间.Model的所有子对象要加载字符串数据时,应调用Model的LoadString方法.

CModelMgr: 简要地管理当前引擎加载的所有的Model实例对象.

ModelNode: ModelNode节点树结构以维护Model内部的坐标系统的层次关系.

AnimTracker: 作为一个独立的对象跟踪Model下的一个ModelAnim的运动情况(运动到第几帧等信息).似乎当操作多个Model体系中的类对象时,用C风格函数更能表达逻辑,因为此时的逻辑不能严格归属某类,所以采用了trk族函数来处理AnimTraker和Model,ModelAnim之间的交互.

TransformMaker是骨骼系统的算法核心实现类,由ModelInstance::UpdateCachedTransformsWithPath,ModelInstance::UpdateCachedTransforms启动.

动作过渡机制的调用堆栈
trk_SetCurAnim(LTAnimTracker *pTracker, uint32 iAnim, bool bTransition)
ILTModel::SetCurAnim(HOBJECT hModel, ANIMTRACKERID TrackerID, HMODELANIM hAnim)
CLTClient::SetModelAnimation(HLOCALOBJ hObj, uint32 iAnim)

LTAnimTracker中m_TimeRef记录了动作信息,这个名字起的不好.

posted @ 2005-08-22 10:32 linghuye 阅读(1468) | 评论 (2)编辑 收藏

LithTech Jupiter引擎学习笔记.2700

1.使用了http://www.radgametools.com/default.htm的游戏Video播放格式bik,有免费的播放器,玻璃渣Diabol2用的也是这个影片格式,而现在改用avi了.
2.Development\TO2下是服务器+客户端,服务器的界面值得学习.
3.将\tools\Plugins\DTXFormat.8bi装在\Program Files\Adobe\Photoshop x\Plug-Ins\File Formats下,可以在PhotoShop中存出DXT格式文件.
4.ModelEdit在原始建模工具3D Max,Maya和引擎程序之间建立了操作缓冲,可以供美术查看预览和增加附加效果,程序进行必要的优化和数据调整,检查.仅仅只为建模工具提供格式导出插件是不符合实际的的,是错误的做法.
5.HeightMapToNormalMap,高度图导出法线图,dot3 bump mapping,这个工具不错.
6.LithRez,打包工具,非压缩式存储.打包的好处,it saves some space and adds convenience during installs by reducing the number of files you must copy to the player’s machine from hundreds or thousands down to a single one. It greatly increases resource loading times,不容易被修改破解.
7.像Unreal,LithTech这样的商业引擎都有着非常好的代码质量,严格的接口概念,优秀的工具支持.
8.看来只能只能全面学习,才能借鉴形成自己的思路,强行突破一点是不现实的.
9.注释很详细,很好.

posted @ 2005-08-21 11:41 linghuye 阅读(3420) | 评论 (7)编辑 收藏

Rational Purify使用感受

先说缺点
1.基本上对Release版本的程序没什么用,一个清清白白的Hello World程序Release版都能被它测出64k的内存泄漏,真是让人吐血.
2.极不稳定,崩溃无数,如果一天使用下来没有使机器死机,就让我们感谢上帝.作为一个测试工具自身如此多的致命问题,再次吐血.
3.文档很烂,大部分你查到的文档,总是说它能做这个,能做那个,把这个工具吹上天(都是那些无知的工程管理人员).
4.被它Instrument的大型程序(Release 1M以上,Debug 4M以上)极不稳定,容易崩溃,运行速度会慢2个数量级,导致根本无法正常运行到进程退出,内存错误查找更无法进行.

使用
1.对Debug程序能很好地查出内存泄漏,并且精确定位代码行.
2.使用很简单,在Rational Purify环境中Run要调试的程序,Purify首先会自动instrument你的程序,查找每个内存操作相关指令,并写入加上自己的检测指令,然后将修改完的程序复制到Purify Cache目录下运行.在运行中维护一张内存使用表,检测每块内存的分配和销毁.直至最终程序退出,Purify根据其维护的内存使用表,总结所有没有被释放的内存.
3.Purify会instrument所有程序用到的dll执行文件,包括系统dll,可以设置每个dll的instrument程度.
4.可以使用Filter过滤掉一些良性的内存错误.

这个文章详实地探讨了Purify的原理和缺陷.
http://www-2.cs.cmu.edu/~aldrich/courses/654/homework/example-tool-eval2.pdf

posted @ 2005-08-20 01:08 linghuye 阅读(2610) | 评论 (0)编辑 收藏

职业崇拜 - 程序天才


John Carmack and Seumas w/ John's Ferrari
咋就这么酷呐!
如果说,在游戏界有一个人能够引导整个业界跟随着他的脚步,按照他指引的方向前进,那么这个人就是 John Camark
作为整个游戏界最知名的程序设计师, Camark 的设计技巧是超乎常人的,在业界里, Camark 的编程技巧是所有程序员的典范。他走在3D图形技术和游戏设计开发的最前沿,开创了3D游戏的新境界。这个“地球上最牛的程序员”最大的魅力来自于他的无私,他坚决走开放API的道路,以开发OpenGL的游戏为其设计道路,对于其它需要授权许可,权利金,将技术占位己有非开放API,例如微软的DX系列API,其坚决摈弃。曾经效力过的公司SoftDisk总裁艾尔在看过Camark的一个设计后,建议他去申请专利,Camark听后怒不可遏。这已经触痛了这个理想主义程序员心里敏感的神经。这个能让微软为他的言论做出解释和回应的程序员,是今天游戏界的传奇,他的个性和直言不讳,更加让一群追随者崇敬不已。

posted @ 2005-08-19 12:46 linghuye 阅读(578) | 评论 (0)编辑 收藏

计算几何资源备忘

1.General Polygon Clipper ,商业级质量的2D多边形,并/差/异或的算法库,支持带洞多边形,极其强大.C开源码形式
http://www.cs.man.ac.uk/~toby/alan/software/

2.Computer geometry algorism library, 以C++范型概念构架起来的几何算法库. 
http://www.cgal.org

3.The Stony Brook Algorithm Repository
   http://www.cs.sunysb.edu/~algorith/index.html

4.http://www.geometryalgorithms.com

5.http://www.faqs.org/faqs/graphics/algorithms-faq/

6.Computational Geometry Code
http://compgeom.cs.uiuc.edu/~jeffe/compgeom/code.html

7.http://exaflop.org/docs/cgafaq/

posted @ 2005-08-17 00:06 linghuye 阅读(1816) | 评论 (2)编辑 收藏

类MPQ格式游戏资源打包解决方案

类Blizzard  MPQ格式的游戏资源打包解决方案
1.打包成单文件的独立虚拟文件系统支持,减少游戏资源载入的IO消耗时间.
2.支持Zip,LZMA,Wave压缩,文件表加密.
3.支持与本地操作系统的文件树无缝连接(优先加载本地文件树系统中的文件,用于资源补丁发布等),分语言的资源管理.
4.欢迎使用 Linghuye Software

http://www.cnitblog.com/Files/linghuye/PackCraft_2710.rar

posted @ 2005-08-14 19:00 linghuye 阅读(2765) | 评论 (0)编辑 收藏

仅列出标题
共23页: First 14 15 16 17 18 19 20 21 22 Last