-
PANDA3D
入门
----------
古道天马
一、
前言
这个是我自学的总结。
因为刚开始看
PANDA3D
的教程,发现在看天书,静下心来学后,感觉其
实是教程不够
深入浅出,
没有照顾我们这些一点基础都没有的初
学者。
因此,
把我自学的一点心得记录下
来,便于自己及他人参考。
学习
P
ANDA3D
的目的是编制一个三维的设备管理程序。嫌
C#<
/p>
运行效率低下,
C++
的语
言不够简练,
看好了
PYTHON
< br>编程。
百度了一下,
PYTHON
的
3D
图形库有
PYGLET,PA
NDA3D
,
BLENDER
等,最初
是想用
BLENDER
,但是
BELN
DER
侧重于建模,于我的用途不太符合。改
用
PYGLET
的,看中它也是很简练的库,后来发现
P
YGLET
缺乏维护,教程也少。因此转向
PANDA3D
p>
,
PANDA3D
的教程以及维护要完善的
多。
但是按网上的说法,
学习曲线是
比较陡峭的。
果然,刚开始时一头雾水,经过查阅官方
教程后,
又通过自己一点点的实验和摸索,稍微有点头绪了。顺便提一下,我的
PYTHON
p>
和
PANDA3D
是同步学的,
都在初级阶段。
这里侧重写
PANDA3D
的特点
,PYTHON
的略微提到些。
注意:这不是手册,很多进阶的东东请查官网手册。
二、
安装
我的系统是
WIN7 64
位,安装<
/p>
PYTHON
的
2.7.6
版本
32
位版,
/ftp/python/2.7.6/
PANDA3D
的
1.8.1
版本
(自带
2.7.3
版本的
PYTHON
)
。
/download/panda3d-1.8.1/
打开
“开始”
菜单,
运行
PANDA3D
下的范例
文件,
第一个范例是
ASTEROIDS
,小行星。
点击“
Run Asteroids
”
,
出现游戏界面
这说明
P
ANDA3D
内含的
PYTHON2.7.3
< br>已经可以运行了。
现在,大家肯定都迫不及待的要看看源代码了吧。
点击
View Source Code
出现文件夹
点击
,
p>
结果出现提示没有找到模块,
说明你的
PY
THON2.7.6
还没找到
PANDA3D
< br>的模块。那么按下面的方法做。
在
C:Python27Libsite-packages<
/p>
的目录下,建一个
的文件,用写字本添加
下列
文本(这里的文件路径是默认的,如果你修改过的话,根据实际情况调整)
C:Panda3D-1.8.1
C:Panda3D-1.8.1/direct/src/actor
C:Panda3D-1.8.1/direct/src/cluster
C:Panda3D-1.8.1/direct/src/controls
C:Panda3D-1.8.1/direct/src/directbase
C:Panda3D-1.8.1/direct/src/directdevice
s
C:Panda3D-1.8.1/direct/src/directnotify
C:Panda3D-1.8.1/direct/src/directscript
s
C:Panda3D-1.8.1/direct/src/directtools
C:Panda3D-1.8.1/direct/src/directutil
C:Panda3D-1.8.1/direct/src/distributed
C:Panda3D-1.8.1/direct/src/extensions
C:Panda3D-1.8.1/direct/src/extensions_n
ative
C:Panda3D-1.8.1/direct/src/ffi
C:Panda3D-1.8.1/direct/src/fsm
C:Panda3D-1.8.1/direct/src/gui
C:Panda3D-1.8.1/direct/src/interval
C:Panda3D-1.8.1/direct/src/leveleditor
C:Panda3D-1.8.1/direct/src/motiontrail
C:Panda3D-1.8.1/direct/src/particles
C:Panda3D-1.8.1/direct/src/physics
C:Panda3D-1.8.1/direct/src/pyinst
C:Panda3D-1.8.1/direct/src/showbase
C:Panda3D-1.8.1/direct/src/showutil
C:Panda3D-1.8.1/direct/src/task
C:Panda3D-1.8.1/direct/src/tkpanels
C:Panda3D-1.8.1/direct/src/tkwidgets
C:Panda3D-1.8.1/bin
再次点击
,
看看是否成功运行。
三、
正式开始
现在安装工作已经完成,我们可以正式开始了。
右键
文件,用
IDLE
p>
打开,我们可以看到源程序,按
F5
可以调
试运行。
不过拿这个源程序作为我们的开端,显然是不合适。
3.1
第一个
PANDA
程序
现在我们开始编
写第一个
PANDA3D
程序。
第一个程序,当然要简单粗暴些。
新建一个
(
注
:
PANDA3D
似乎不支持中文目录,
所以你的程序不要放在中文目录下)
,
用
IDLE
编辑(原则上你也可以用其它文本编辑器编辑)
输入以下两行
import
Start
run()
CTRL-S
保存,
F5
运行(顺便提一下,
PYTHON2.7
以前的
IDLE
< br>是不支持右键复制黏贴的,不
用快捷键会很蛋疼,
2.7
的版本是懒人的福音)
出现一个灰色
的空窗口,比较简陋些,不过作为第一个程序已经够了。
根据官网的解释,
第一句
import
Start
p>
,建立
ShowBase
的实例
第二句
run()
,循
环运行
ShowBase
实例,监视键盘鼠标输入,并反馈。<
/p>
(
试试:如果删了
RUN()
会咋样?
)
老版本的
PANDA
的语法是这样写的。
p>
from
direct.
showbase
.
ShowBase
import
ShowBase
p3dApp =
ShowBase
()
p3dApp.
run()
这里的
ShowBase
是显式的,新的语法里
都简化了。有兴趣的话,你可以打开
C:Panda3D-1.8.1directdi
rectbase
看看里面的源程序。
不过,本着初学者够用就行的态度
,咱们就不用深究这些了,只要记住这两句的作用如下:
import
Start #
建立舞台
run() #
演出开始了!
#
< br>是
PYTHON
的注释方法
保存时,程序会提示你有中文注释,要加
# -*- coding: cp936 -*-
,同意它修改就好。
3.2
加料
灰色窗口太不起眼了,需要加点料,事实上只要加两行就能让它大变样。
# -*- coding: cp936 -*-
import
Start #
建立舞台
environ = del(
ntTo(render)
run() #
演出开始了!
F5
出现
哈哈,两行代码就有这么大变化,
:
-O
,厉害的!
还有更厉害的,试着按住鼠标左右键拖动看看!
默认的鼠标控制方式如下:
(当然,这个控制方式很不人道)
Key
鼠标左键
鼠标右键
鼠标中键
Action
左右进行平移
前后移动
围绕程序的坐标原点进行旋转
鼠标右键和中键
围绕视野中心轴进行滚动
对这两句代码的解释如下
environ =
del(
导入模型
ntTo(render) #
将模型加入渲染列表
第一句代码:
environ, <
/p>
是我们自行规定的一个变量,这个变量现在代表了我们在等号后面导入的模型。
del( ),
它的作用是导入一个模型。
(
p>
注意
:PYTHON
对大小写敏感
)
这句代码稀奇的是,
我们并没有新建这个模
型,
可是却可以导入这个模型。
那么这个模型在
哪里呢?原来,这个模型在
C:Panda3D-1.8.1models
下,文件名为
。
(
注意
:
在代码里面的文件路径用的是
LINUX
的斜杠
”
/
”
,和
WIN
下的反斜杠
”
”
不一样
)
p>
这个
*.pz
文件,是一种压缩格式,后面
会提到。
这里我们只要理解了,程序在
默认的文件夹下找到了
enviro
nment
的模型文件。当然,这
个文件有可能是
或者
或者
< br>
。
(试试,将
C:Panda3D-1.8.1models <
/p>
下的
改名或者挪个位置)
事实上,
如果我们在程序所在文件夹下新建一个
p>
models
文件夹并将
< br>拷贝
在此文件夹下,程序同样可以找到模型。
(想想,如果有两个同名模型会咋样?)
第二句代码:
ntTo(rende
r)
,
意思是将
environ
模型置于
render
节点下。
节点是个术语,
是为了
更好的组织各个模型。
模型只有置于节点下,才能被程序渲染。
整个
结构是个树型表。
有个比较容易理解的比喻是,将节点看成文件夹。
Render
就是根目录
C:
,模型就是文件,
我们要看到模型,就必须把文件拷到
C<
/p>
:
(关于节点的用法,我们后面详述)
。
当然,为了方便管理,我们可以在
C:
盘下建立目录,以及子目录,这种目录叫做空节点
四、
创建模型
上面那个
< br>environment
模型,超出了我们的理解能力。现在,我们试着自行建立
一个模型。
在你程序所在文件夹下,创建一个
models
文件夹。
4.1
建立正方形
在
models
文件夹下,新建一个
< br>
模型文件。
用记事本编辑
p>
,并拷入下列代码。
1.0 1.0 -1.0
}
1.0
-1.0 -1.0
}
-1.0 -1.0 -1.0
}
-1.0 1.0 -1.0
}
}
}
}
现在将我们的
修改为
# -*-
coding: cp936 -*-
import
Start #
建立舞台
box =
del(
导入模型
ntTo(render) #
将模型加入渲染列表
run() #
演出开始了!
F5
运行,咦,还是没东东啊。
我们还需要加代码。
# -*- coding: cp936 -*-
import
Start #
建立舞台
box = del(
导入模型
ntTo(render) #
将模型加入渲染列表
(0,20,-3)
#
设置模型原点的位置
run() #
演出开始了!
p>
(0,20,-3)
,含义是将模型按其原点(
0,0,0
)对应
PANDA3D
坐标的(
0,20
,
-3
)的对
应关系放置。
一个梯形。
如果你按住鼠标左键移动
的话,会发现,原来是个一个水平放置的正方形。
现在我们得了解一下
PANDA3D
的坐标系以
及
EGG
文件了。
下面是
PANDA3D
的坐标系
从屏幕
上看,就是
X
方向是屏幕的宽,
Z
p>
方向就是屏幕的高,
Y
方向就是屏幕的深了
。
Z
Y
X
Z
Y
X
简单解释一下
文件代码的含义
方向
向上,这和
PANDA
的坐标系是一致的。
< br>(你可以试试
X
方向或者
Y
p>
方向向上会如何)
给顶点集和多边形编组
顶点集,我们将这个集命名为
CUBE
顶点集下的第
1
个点,编号为
0<
/p>
,你也可以从别的序号开始编
1.0 1.0 -1.0 //
顶点的
X Y
Z
坐标
}
1.0
-1.0 -1.0
}
-1.0 -1.0 -1.0
}
-1.0 1.0 -1.0
}
}
多边形
多边形的顶点是顶点集
CUBE
下的
4
个点。
}
}
上面点的坐标是相对模型空间的原点(
0,0,0
)的值,原点也是
setPos(
)
函数操作的点。
(0,20,-3)
#
设置模型原点的位置
这句的意思就
是将
box
模型按照模型空间原点(
0
,0,0
)对应屏幕空间点(
0,20,-3
< br>)的方式放
置。
实践:
1
)
调整程序文件中的
setPos()
的参数,看看有什么变化。
2
)模型
文件中的增加或者减少多边型的点,改变点的坐标,改变多边形点的排列顺序,看
看能否
找到什么规律(注意,一次最好只改一项)
刚才我们在用鼠标移动那个水平放置的正方形时,会发现正方形移动到屏幕上方会消失。
这说明这个正方形是有方向型的,它的反面是不可见的。
模型的方向是右手性的。
右手螺旋系
当然,
< br>PANDA
的坐标系也是右手性的。
< br>反面不可见是为了减少计算量,所以我们要确保多边形在正确的方向上,以免看不到。
4.2
建立正方体
现在我们可以通过修改<
/p>
EGG
文件来创建一个正方体模型了。
在
MODELS
文件夹下新建
文件。
小心调整方向后,我们得到下面这些代码。
1.0 1.0 -1.0
}
1.0 -1.0 -1.0
}
-1.0 -1.0 -1.0
}
-1.0
1.0 -1.0
}
1.0 1.0 1.0
}