目录
前言(阿巴阿巴)
安装
调整窗口
导入环境
前言(阿巴阿巴)
前几天无意间看到了一个叫做panda3d的东西,觉得挺好玩,就翻教程,发现现在中文教程似乎没有那么全面成体系,大部分都是复制粘贴过来官网的实例然后就发布出去了,看得云里雾里的,所以我决定自己去摸索一下这个panda3d,学panda3d的小伙伴中间肯定遇到过很多坑,也有过很多不理解的地方,不过没关系,来瞅瞅我的这个panda3d教程,给你个比较全面的讲解。
我整了个QQ群,180962166,有不会的进来问就行(如果我会的话)
好了,正式开始。
安装
想要用这个panda3d呢可以通过官网sdk下载或者通过pip命令安装,官网地址Panda3D | Open Source Framework for 3D Rendering & Games
安装sdk就点击中间那个按钮就行,很简单对吧,不过我用的是另一种方式,pip安装
命令pip install Panda3D , pip install panda3d 这俩都行,都能安装下来。
然后新建一个文件夹起名叫ch1(名字无所谓),然后新建一个game.py(名字随便起)的文件
大概是这个样子
调整窗口
下面直接贴代码块,讲解的内容也在代码块里(贴代码块省事,省的编辑格式了)
#第一步导入,导入这个叫做ShowBase的类,它是一个panda3d的基础类,用来创建窗口的
from direct.showbase.ShowBase import ShowBase
#然后定义一个Game类,继承上面导入的ShowBase类,然后就是Game类init,showBase类init,没啥好说的
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
#实例化一下这个Game类
game = Game()
#ShowBase类里有一个run方法,启动窗口用的,这里Game也继承了ShowBase,所以直接game.run()
game.run()
运行之后发现出现了一个灰色窗口,窗口里没有任何东西(实际上,你根本没写东西,显示出其他东西的话才见鬼了)
好了,如果你运行出来上面窗口了,恭喜你,你的环境没有任何问题,可以继续往下进行了。
我觉得这个窗口有点小,我想调成我想要的
#第一步导入,导入这个叫做ShowBase的类,它是一个panda3d的基础类,用来创建窗口的
from direct.showbase.ShowBase import ShowBase
#############################################################
导入一个叫做WindowProperties的东西,它可以帮你解决窗口大小问题
from panda3d.core import WindowProperties
#############################################################
#然后定义一个Game类,继承上面导入的ShowBase类,然后就是Game类init,showBase类init,没啥好说的
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
##############################################################
properties = WindowProperties()
第一个是长,第二个是宽
properties.setSize(1000,750)
给刚才的配置应用到窗口里
self.win.requestProperties(properties)
##############################################################
#实例化一下这个Game类
game = Game()
#ShowBase类里有一个run方法,启动窗口用的,这里Game也继承了ShowBase,所以直接game.run()
game.run()
运行,然后你就会发现窗口变大了
后面代码多了之后可能会变混乱,我把每一次出现的新代码用#框起来,#里出现的代码就是新加入的代码,这样看起来会比较容易点,当然如果各位观众老爷觉得这样看起来让你很不爽的话,评论区里告诉我,我改成其他方式。
导入环境
代码能跑了吗?能,但是只跑了一点点,空洞的一个灰窗口没啥意思,我给它加点背景,导入环境,让它没那么无趣。环境文件在QQ群里,群号博客开头有。
from direct.showbase.ShowBase import ShowBase
from panda3d.core import WindowProperties
#############################################
导入一个叫做Actor的类,它是用来加载模型的
from direct.actor.Actor import Actor
#############################################
class Game(ShowBase):
def __init__(self):
ShowBase.__init__(self)
properties = WindowProperties()
properties.setSize(1000,750)
self.win.requestProperties(properties)
##########################################################################
#panda3d提供了很多全局对象,这里的loader就是其中之一,用loader的loadModel方法可以把
#环境文件导入到Game类里,environment不用写后缀,panda3d会自动帮你检测
self.environment = self.loader.loadModel('Environment/environment')
把self.environment定向到父节点下,self.render就是一个父节点,下面讲节点
self.environment.reparentTo(self.render)
##########################################################################
game = Game()
game.run()
运行之后,环境模型被成功加载
上面提到了一个节点,这个节点是啥呢(了解即可)
这就是一个节点图,每个节点是一个对象,最上面的节点是所有类的父类 ,我们用到的全局对象render是一个Node,我们的Game也是一个Node,Game继承的父类ShowBase类也是一个Node,也就是说其实Panda3d里的东西都是Node形式的。
大概第一节课就讲这么多叭,跟着上面的代码跑一下,没问题的话咱们就继续下一讲了。观众老爷们下节见^-^