2001-11-19 :
人生中到底什么是最痛苦的?我不知道。但我现在很痛苦。4个月前我失业了,而且一直没有找到正式的工作。2个月前,朋友找我开发一个项目,我总算暂时有了份工作。但,现在项目结束了,我又失业了。离开了朋友们我觉得很寂寞。离开了开发软件的朋友们,没有人同我侃技术我觉得很苦闷。今天,无所事事在网上闲逛,发现CSDN可以上传文件。我就在这里自言自语吧。
很久以前,我有一个梦想:我想写一个自己的3D游戏。我想这可能是很多人都曾经有过的一个梦想。现在既然如此无聊,我想是该动手的时候了。写到这里,我的脑海里浮现出以前的朋友们听到我的傻念头的表情:满脸痛苦状,呕吐。以前我曾经收集过这方面的资料并看过一些相关文章,至少我知道如何开始。
在3D引擎这方面我并没有什么新颖的想法,我只是想写一个普通的引擎。引擎的基本类型我打算设计一个BSP+PORTAL引擎。整个工程大约有一下三个部分:
3D图形编辑模块:主要用于工程管理和图形设计。
3D编译器:依照工程描述及相关文件编译生成3D运行文件。
3D引擎:解释运行3D文件。
唉,看来每个部分都不小,只好发扬蚂蚁啃骨头的精神了。就从图形编辑开始吧。我打算写一个类似3D Max的3D图形编辑程序。刚开始很简单,开发速度也很快,大致如下:
single document application.
dock一些toolbar, controlbar。增加一些美化。使用CJ60足以。
拆分出4个窗口。x、 y、 z projection window和一个preview window。
写一个projection coordinate <-> window coordinate转换。
在projection window上画些坐标线。
搞一些鼠标动作,至少拖动鼠标时可以看到select box。
简单的是写完了,接下来就是头痛的了。头痛的痛点就是“框架”问题,大致如下:
对象的动态创建问题。
对象的动态注册问题。
对象的属性管理问题。
Persistence Object的Serialization问题。
动态创建对象是比较容易解决的问题。无论使用CObject的RTTI、DLL接口函数还是Com,只要接口定义统一,问题不大。动态注册是为了提高扩展性和自定义功能。随着系统开发深入,必然会出现很多新的对象类型,如果每次都要修改整个工程,恐怕会被累死。在上万行的系统中,增加或删除点东西,还真不是一件容易的事情。关键的问题在于property manager和serialization。我认为serialization问题解决的好,编辑系统就成功了一半。而且serialization又同dynamic creation support和property manager息息相关。编辑文档的保存和打开需要serialization。编辑过程中的copy/parse需要serialization,不过是物理介质不同。那么,自定义模板哪?通过编辑基本元素,设计好一个桌子,是否下次还要重新编辑?如果要完成这个功能,恐怕还是要serialization打交道。property manager主要是编辑对象的属性值和提供属性的type和value为serialization服务。同时在object dynamic create后,property manager提供了一个initialization object的时机和手段。
其实,这些问题在很多编辑系统中都是共性的,例如:组态系统、课件编辑系统等。几个月前,在设计一个类似InetDev的JSP图形化开发工具时也遇到了类似问题。实现的手段也是多种多样的。但基本上都是围绕着“挿件”这个概念进行的。虽然实现手段很多,但我还是非常的头痛,而且越来越头痛。因为,我关心的不只是手段和方式问题,我最关心的是开发成本问题。呵呵,一个人开发也要讲究成本嘛。
相关文章
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16424>Looking 2001-11-19</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16426>Looking 2001-11-24</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16440>Looking 2001-11-21</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16441>Looking 2002-10-17</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16442>Looking 2002-10-31</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16443>Looking 2002-11-3</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16444>Looking 2002-12-2</a>
<a href=http://www.csdn.net/Develop/Read_Article.asp?Id=16445>Looking 2003-1-6</a>