Python开发3D游戏技术探索

​ 前端时间导师安排开发一个3D的强化学习环境,其实也就等于开发一个特定场景的游戏。经过一段时间的调研与实践,在这里分享下自己的经验,希望能对你有所帮助。

​ 其实最开始的时候,导师问,能做成3D的么,要是不行的话,2D的也行。TM,当时就是嘴贱,否则也不至于后面几个月愁的头发直掉😹。

资源分配图

​ 废话不多说,下面开始正文部分。

1.Python能否开发游戏

​ 目前Python语言还是非常流行的,加上做机器学习,基本上也没有别的开发语言的选择,所以在语言的选型上是没有纠结的空间的。

​ 那Python能开发游戏么,答案是肯定的,并且python在开发游戏上,也有不少优秀的游戏的游戏引擎可以使用。首先就是PyGame,老牌的游戏引擎,开发文档齐全,网上教程多,许多python游戏开发书籍都是以PyGame为主体的。还有就是cocos-2d,一款非常好用的游戏引擎,博主以前使用过JS版本的开发过一个游戏,使用其提供的IDE,非常方便,没想到也提供了Python版本。当然还有其他比较流行的引擎,就不在一一赘述了。

​ 我也找到了一个大佬使用python开发的游戏,大家可以参考下,github地址.

​ 哎,上面两款好用的引擎都是开发2D游戏的,心塞,只能继续探索。

资源分配图

2.Python3D游戏引擎

​ 经过调研,主要把目光发在了以下三款引擎上,OpenGL、Pyglet、Panda3D。

2.1 OpenGL

​ OpenGL(Open Graphics Library),意为“开放式图形库”,是一个编写2D和3D应用程序的跨平台API。OpenGL 不是一个独立的平台,因此,它需要借助于一种编程语言才能被使用。C / C++ / Python / Java 都可以很好支持 OpengGL。Python版本的OpenGl模块名为PyOpenGL

​ 听着是不是很厉害,也确实很厉害。但是太难了,学习成本过于高了。。在看了几篇介绍文档后,我就放弃了。

​ 参考资料如下,有兴趣的可以看下。

万字长文详解如何用Python玩转OpenGL

2.2 PyGlet

Pyglet 是一个易于使用但功能强大的库,用于在 Windows、Mac OS 和 Linux 上开发视觉丰富的 GUI 应用程序,如游戏、多媒体等。这个库完全是用 Python 创建的,它支持许多功能,如窗口、用户界面事件处理、操纵杆、OpenGL 图形、加载图像和视频以及播放声音和音乐。

​ 在刚一接触PyGlet,就感觉很棒,很易用,当时也跟着文档做了一个小行星游戏,页面如下:

资源分配图

​ 并且将这个小游戏和Gym进行了整合。

​ 还尝试了加载3D模型,展示如下,当时一度觉得就是他了,可以是后面还是遇到了一些很难解决的问题。

资源分配图
  1. 跨平台效果不好:我在我自己的电脑、Mac上执行,效果还可以,没有什么不一样的,当我到实验室的电脑上执行相同的代码时,出现了很大的偏差,显示效果很差。
  2. 一些配套项目停止维护:比如其官方文档上推荐的3D图形渲染引擎RatCave,已经停止了维护了,也没有找到很好地替代的渲染引擎。在开发过程中,Pyglet加载找到的obj模型文件,报错问题始终无法解决(可能是我技术问题),只能加载其提供的一些模型。。。
  3. 文档过少:在开发过程中,遇到问题,很难找到解决方案,百度搜索的结果基本全是Pyglet入门介绍。简直要崩溃到大哭。

​ 参考文档:PyGlet官方文档

2.3 Panda3D

​ 当时被Pyglet折磨了一段时间后,便动了换路线的想法。网上看了Panda3D的入门介绍(类似于编程学习中的HelleWorld😹),哦,这有点意思哦。跟着教程,十几分钟做了简单的场景,截图如下:

资源分配图

​ 感觉很不错,模型的加载、渲染、动画的执行都很便捷,便进行了更深入的了解,开发了一个小Demo,当时心里就大呼:是他是他就是他。。。

​ 在使用Panda3D的过程中,也遇到了相关内容过少的问题。Panda3D虽然技术很强,可以实现很多功能,但是其被设计给有丰富相关经验的人使用的,对于刚入门的小白不是很友好,加上国内的用户实在是少,所以相关的解决方案基本上也是很难找到。还好其开发文档比较全(全英文😭),根据文档,可以解决入门时的阵痛。

​ 想去BiliBili上找找视频教程,只找了一个博主从Yutubu上下载下来上传的视频,好难啊,英语听力是在是不过关,最后也只能放弃。

​ 不过Panda3D还是很强大的,至少可以解决我所有的需求,虽然过程很痛苦。

​ 参考文档:Panda3D官方文档

2.4 Unity 3D

​ 没想到吧,还有第四个选择。这个是我在检索信息的时候看到的,Unity 3D开放对Python的支持,并且官方提供了一组用于强化学习的3D环境,Github地址

资源分配图

​ 经验主义害死人呀,做3D游戏,第一印象想到的就是Unity,但是其官方开发语言是C#,就一直没想到使用他,后悔呀。但是我使用Panda3D已经开发过半,项目时间也很紧张,也就没有时间在选择换技术了。Unity3D for python我还没有尝试,也不知道效果如何,不过背靠Unity这个大树,相信其功能、易用性上应该没什么问题,后面使用过会在进行分享。

3.总结

​ 本文到这就结束了,每个游戏引擎都有自己的优势,我们也是根据不同的使用需求选择合适的技术。后面会分享Panda3D的使用经验,有需要的可以持续关注,有什么疑问,也可以在评论区留言。

  • 21
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李子树_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值