Python开发3D游戏技术探索_python 3d-程序员宅基地

技术标签: 强化学习  3D游戏  Panda3D  Python  

​ 前端时间导师安排开发一个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的使用经验,有需要的可以持续关注,有什么疑问,也可以在评论区留言。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34666857/article/details/125963313

智能推荐

计算机磁盘管理使用不,电脑报错:因为磁盘管理控制台视图不是最新状态-程序员宅基地

文章浏览阅读3.5k次。出错提示:操作无法完成,因为磁盘管理控制台视图不是最新状态。请使用刷新任务刷新此视图。如果问题仍然存在,请关闭磁盘管理控 制台,然后重新启动磁盘管理或重新启动计算机。方法一:1、这个出错提示只是说明了磁盘管理、移动盘等部位有异常状态。所以,同样的提示,不一定是同样的出错原因导致的,故可以尝试不同的方法来解决问题。右键点击问题磁盘→属性。2、磁盘属性→硬件→点选问题磁盘→属性3、策略→去掉 启用磁..._出现了意外错误 关闭磁盘管理控制台

Python组合数据类型——字典翻转输出:读入一个字典类型的字符串,反转其中键值对输出_字典翻转输出读入一个字典key:value模式-程序员宅基地

文章浏览阅读1.8w次,点赞15次,收藏36次。描述读入一个字典类型的字符串,反转其中键值对输出。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬即,读入字典key:value模式,输出value:key模式。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪..._字典翻转输出读入一个字典key:value模式

paddle 复现 MobileNets_V2模型(只关注模型)_paddle mobilenet-程序员宅基地

文章浏览阅读305次。paddle 复现 MobileNets_V2模型(只关注模型)_paddle mobilenet

给定一个数字n,实现1^2+2^2+3^2+.....+n^2的总值,用递归来实现_给出一个n求2^1+2^2+2^3+……+2……n-程序员宅基地

文章浏览阅读5.5k次,点赞2次,收藏3次。public static int sumNumber(int i){ int sum=0; if(i==1){ sum=1; }else{ sum+=i*i+sumNumber(i-1); } return sum; }_给出一个n求2^1+2^2+2^3+……+2……n

Oracle 进程详解_oracle 进程是什么进行-程序员宅基地

文章浏览阅读1w次。Oracle 进程详解参与数据库活动的进程可以分成两大类,分别是用户进程和 Oracle 进程,而后者又可以分成服 务进程(Server Process )和后台进程(Background Process)。(本文地址:http://blog.sunansheng.com/2016/04/29/oracle-process/)1.用户进程Oracle 提供的若干管理工具是典型的用户进程,比如RMA_oracle 进程是什么进行

创建一个react项目-程序员宅基地

文章浏览阅读809次。一、创建一个react项目一、全局安装reactnpm install create-react-app -g二、 在桌面创建一个react项目create-react-app ‘文件名’注: 文件名中不能含有大写字母【name can no longer contain capital letters】如图:执行这一命令,会有提示信息,将安装react,react-dom,..._创建一个react项目

随便推点

14.1 矩阵幂级数_4.计算矩阵幂级数 0 0.1 0.7 0.3 0.6 k k 8-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏3次。介绍了矩阵的幂级数2024.1.16 增加了一个公式_4.计算矩阵幂级数 0 0.1 0.7 0.3 0.6 k k 8

lrzsz-0.12.20.tar.gz的安装-程序员宅基地

文章浏览阅读7.2k次。1.lrzsz-0.12.20.tar.gz是一款linux下命令行界面上支持上传和下载的第三方工具。 能够起到很方便的作用。# rz 选择文件进行上传 # sz 文件名sz后面跟文件名可以进行文件从linux上面下载2.lrzsz-0.12.20.tar.gz的安装# tar -zxvf lrzsz-0.12.20.tar.gz 解_lrzsz-0.12.20.tar.gz

工业无监督缺陷检测,提升缺陷检测能力,解决缺陷样品少、不平衡等问题(二)_缺陷检测少样本怎么办-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏4次。工业缺陷检测问题点:1)对于未知的缺陷检测能力不佳,经常会遇到明显的缺陷(但从未出现过的缺陷)存在着漏判的问题点;2)工业界存在着大量良品,极度缺乏不良图片,这导致算法性能大幅度下降;解决方案:有监督检测(yolov8、yolov5等目标检测算法)+无监督异常检测方案_缺陷检测少样本怎么办

linux vi o e r d q a,vim编辑器操作汇总-程序员宅基地

文章浏览阅读255次。VIM - Vi IMproved 7.4编辑器操作汇总vim [参数] [文件 ..] 编辑指定的文件或: vim [参数] - 从标准输入(stdin)读取文本或: vim [参数] -t tag 编辑 tag 定义处的文件或: vim [参数] -q [errorfile] 编辑第一个出错处的文件参..._lunix o e r q a

python中的threading_python中threading的用法-程序员宅基地

文章浏览阅读578次。threading提供了一个比thread模块更高层的API来提供线程的并发性。这些线程并发运行并共享内存。下面来看threading模块的具体用法:一、Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行。这里对使用多线程并发,和不适用多线程并发做了一个比较:首先是不使用多线程的操作:代码如下:12345678910..._python threading 用法

Nginx(一)_nginx重载语句-程序员宅基地

文章浏览阅读230次。Nginx(一)Nginx 的主要应用场景Nginx 的主要优点Nginx 的主要优点Nginx 的版本介绍 Nginx 目录并编译下载NginxautoCHANGES文件conf文件configure脚本contrib文件html目录man目录src 目录编译NginxNginx 配置语法Nginx 命令:重载,热部署,日志切割重载配置文件热部署日志切割Nginx 的主要应用场景静态资源服务反向代理服务API服务Nginx 的主要优点高并发,高性能可扩展性 - 模块化设计高可靠性 -_nginx重载语句