关于Java3D游戏的个人探索一小结

转载地址:http://blog.sina.com.cn/s/blog_560eea89010005rm.html

 http://www.amazon.cn/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9B%BE%E5%BD%A2%E5%AD%A6-%E8%B5%AB%E6%81%A9/dp/product-description/B003XKCWHS/ref=dp_proddesc_0?ie=UTF8&s=books

2006年8月,我们终于决定用计算机三维视觉游戏机制制作自己的产品。那制作了半年,约七千余行代码的二维游戏引擎被彻底放弃了。
总结原因,是我这名技术员和做为客户代表角色的大哥沟通不够,没有明确项目需求,导致最后成形的产品完全不能满足客户,我们甚至没有让客户看到它。这期间虽然积累了很多知识,但却对产品的整个开发周期产生了很不好的影响。
转眼两个多月过去了,从零开始学习的三维游戏技术渐渐入门,趁着现在思路还清晰,做一小小结,也算是给自己一些鼓励,为过去的那些亦苦亦甜的日子留一小念。如果哪位打算学习3维游戏,尤其是Java3D游戏的朋友不小心看到这篇文章,希望可以对你小有启示:)
先给我手边的书籍来个列表吧,是这些书籍的作者、译者给予我极大的帮助,没有这些资料,一生还要在黑暗中摸索极长的时间!
书籍列表:

书名

出版社

主要作者

Java游戏编程

希望电子

David Brackeen著
Java游戏高级编程清华大学David Wallace Croft
Java多媒体技术清华大学彭波 孙一林著
Java图形与动画编程实例清华大学李敏 丁友东 著
Java Network Programming(3rd Edition)O'REILLYElliotte Rusty Harold
Java ThreadsO'REILLYScott Oaks & Henry Wong
3D游戏编程大师技巧人民邮电Andre LaMothe
游戏编程中的数理应用希望电子Wendy Stahler
游戏核心算法编程内幕中国环境科学Daniel Sanchez
游戏编程全接触人民邮电Mike McShaffry
使用VRML与Java创建网络虚拟环境陆昌辉
创造游戏中的艺术希望电子Matthew Omernick
水晶石教材系列-建筑表现技法II建模篇中国青年水晶石数字科技著
OpenGL三维图形系统开发与实用系统清华&重庆和平鸽工作室
OpenGL编程指南(五版)机械工业Dave Shreiner
OpenGL游戏程序设计科学出版社霍金 阿斯特
3D数学基础:图形与游戏开发清华大学Fletcher Dunn
还有许多探讨Java语言的书籍没有罗列在此。以上很多书籍的内容知识点是重复的,但是不同的作者从自身的观点出发,通过不同的例程阐述着技术的精髓,所以虽然有所重叠,却可以帮助我更好的把握和理解作者真正要表达的内容。
我并不是一个购书狂,只是在一本书看到卡壳的地方,就会去网络上寻找专题文章,如果找不到就再买一本书,看看其它的作者怎么说,或者索性弄一本专著来。
做三维游戏首先要解决绘图问题,其实在了解计算机图形学专业课程之前,有更重要的一件事情要做,那就是决定谁来绘图!
如果是用Java或C++等程序来自己制作整个绘制过程,那么需要找一本计算机图形学的典籍来,很认真的从三维坐标空间开始学起,包括各种投影算法,优化算法,贴图算法等等,期间大概还要补习一下代数,几何,高等数学的知识。如果决定由硬件绘图,那么只要选择OpenGL或者D3D其中之一便可以,这样可以跳过95%的计算机图形学知识!只要花费一点时间来学习OpenGL的用法。
产品开发周期和用Java语言实现迫使我只能选择OpenGL做为底层绘图实现。那么Java语言如何调用OpenGL绘图呢?我找到了几个方法,JOGL,LWJGL,Java3D,Xith3D.
JOGL和LWJGL都是Java的OpenGL绑定,Java程序调用JOGL或者LWJGL库,JOGL或者LWJGL再去调OpenGL.几乎是原班照搬,所以是Java实现最接近OpenGL语言的一层。
Java3D建立在OpenGL和D3D实现之上,屏蔽了底层绘图的实现,可以非常方便的制作三维场景,程序人员不必花心思去学习OpenGL,只要学习Java3D的库结构即可。但是我在学习的过程中发现Java3D的入门文章多而高深文章极少,而且我没有找到Java3D的源程序,遇到Bug和许多不知名的问题,我对这个高层建筑很不放心。
Xith3D是专为Java量身制作的Java3D游戏引擎,包括了常用的模型载入器,绘图层采用JOGL或LWJGL,是类似于Java3D但更注重游戏开发的库,虽然名声响亮,但我对其很失望。Xith3D并不是一个容易安装,并且安装之后可以便捷地投入使用的游戏开发工具包。其中的一些小Bug直接让你的游戏Crash.
想偷懒的我花了一段时间在Java3D和Xith3D上,遗憾的是碰的满头包,他们并没有想的那么好,反而让我有种深受打击之感。
万念俱灰之下,终于痛下决心,从LWJGL这样的底层调用开始入手,自己动手解决一切问题!
所以我的游戏引擎的绘图是基于LWJGL的OpenGL调用,3维空间的类型是自己一一定义的。如此一来,虽然不见得有最好的解决方案,起码一切都在我的掌握中,发现Bug不用去学习别人的源代码(尤其是在源代码都找不到的情况下,好汗!)
LWJGL几乎是照搬了全部的OpenGL函数,因此学会了OpenGL,也就会以用LWJGL。这样学习内容进入到OpenGL领域,由于OpenGL是语言独立的,所以不论以后用C/C++, .net, Delphi...什么计算机语言,都可以用到其中的知识。这是非常有益的知识积累。
在不求甚的解明白了OpenGL的基本用法后,绘图模块就可以告一段落了。
我们解决了谁来绘的问题,那么怎么绘的问题就由OpenGL去做了。
后面就都是游戏引擎的软件任务,再没有OpenGL那样既免费又极好吃的午餐肉了。绘三维物体,三维物体的原始模型数据怎么得到,如何更快速度的绘制场景,三维物体之间的关系如何,两个物体的碰撞,逼真的再现物理关系,玩家与场景的互动,声音模块,都是一串很棘手的问题。
制造物体模型的原始数据,当然离不开Maya,3D Studio Max这样的专业三维模型制作软件,如何制作好看逼真的模型是3D建模师的事情(也是我的事情),把模型在游戏中还原是游戏引擎的事情,所以决定先用比较简单的一种方法:用3DSMAX制作模型,并导出为OBJ文件和MTL文件,分别还原模型和材质,游戏引擎再从文件系统中载入这两个文件,用OpenGL在游戏中还原这些模型,并配以指定的材质。如此,模型数据的来源和再现问题便告一小捷。当然,在产品正式推出之前还需要对原始模型进行加密转换,一来加入自己的版权信息,维护模型尽量不被盗用,二来过滤掉其它软件的版权信息。
这就是整个产品目前的状况,在学习了OpenGL,LWJGL,3DSMAX建模技术之后,我将步入游戏引擎的开发。
任务一:要学习合理组织场景中物体的数据结构,如BSP,八叉树等等。这些结构往往不仅仅要有利于物体的绘制,游戏的运行速度,还要有利于路径探测,碰撞检测等算法。(三十天)
任务二:将物理运算模块加入引擎。要深入应用牛顿关于力学的部分和热学部分。(三十天)
任务三:在任务一和二的基础上,完成整个引擎的物体间关系运算,使玩家受应该有的空间约束和正常的地心引力。(十五天)
任务四:完成一个角色建模,动作动画(争取实现前向和反向动力学混合技术)。(三十天)
任务五:完成声音系统,基于JOAL或者Java Sound技术。(七天)
任务六:完成游戏规则脚本规划(三天)
任务七:完成游戏规则脚本流程编辑器,让用户自定义游戏逻辑和故事内涵。(四十天)
任务八:终极优化,本地DLL计算模块制作,多线程优化等。(三十天)
任务九:完成基于本引擎的一个游戏案例,包括角色和游戏逻辑。
(五一之前完成所有测试和完整案例(单机版)。)
任务十:加入服务器,构建网络模块。完成网络版(支持语音和视频)(六十天)
附加任务:加入地图改造编辑器。(六十天)
呵呵,前几个月,现在,后几个月的任务都列在这里了,看看紧张的时间表,每一天都是充实的,每一天,都向成功迈进一步!
愿天下所有本本分分付出努力的人们,幸福,快乐!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值