从Java3d开始,对场景图(Scene Graph)就一直抱有好感,对直接操作OpenGL深恶痛绝!也正是因为这个原因,虽然python+pygame对于二维的操作非常好,但三维却是直接操作OpenGL,使得我一度倾向于使用java+xith3d,尽管与Python相比,Java让我看着就神经衰弱~
还好发现了Panda3D!它支持python和C++,使用场景图来放置对象,底层功能是用C++写的,但是程序的编写却是鼓励用python,几乎所有的文档和例子都是针对python的。python+pygame+panda3d,简直就是绝配啊~~
好像是从前天开始开始看panda3d的manual,因为有个中文翻译的版本,虽然和最新的手册有些出入,但大致该说的都讲到了,其他一些高级的特性我也用不到,再看了看例子,现在有点感觉了。场景图的概念和Java3d、Xith3D里的差不多,简单易学,我感觉以后这就是3D程序的趋势了。操纵3D对象也很简单,另外还支持动画,这个很有意思,以前我没有关心过,这次看了例子,发现很简单,只要是egg模型文件里有动画就行,都不用编程实现~整个流程就是先建立一个World对象(从DirectObject继承,这样才能响应事件),在__init__函数里导入模型,添加到render上,设置好键盘、鼠标处理函数,用OnscreenText在屏幕上写上提示,再多就是添加几个actor(动画模型)和interval(动画播放),添加几个在每一帧都要调用的task函数,然后建立一个World的实例,调用run函数就OK啦~
当然如果要和pygame联合使用,就要处理Pygame里的鼠标、键盘、游戏手柄等检测事件,这也不难,建立一个task来检查就是了~
所以今天中午感觉使用Panda3D一个关键的环节就是建立3D模型!我以前用wings3d建立的模型如何转换到Panda3D所支持的文件格式是今天主要研究的问题。研究的结果是目前Panda3D对于非egg文件支持最好的就是x文件(DirectX文件),而我用的wings3d可以直接导出为x文件!看上去没什么问题了,不过在完成转换工作并进行测试之前,我仅能持谨慎乐观的态度。今晚的任务就是转换已有的3D模型,并进行测试。
没有评论:
发表评论