panda3d 解读Roaming Ralph程序
2012-08-05 11:34
169 查看
这里就不贴代码了,笔者根据自己阅读代码的过程流水账式的解读,主要便于自己之后的阅读,也希望给其他读者带来帮助。
首先解读这段代码:
import direct.directbase.DirectStart
这是 from direct.showbase.ShowBase import ShowBase的简写,由panda3d的manual可以查到,而ShowBase是panda3d运行和渲染的基础类,这里不做过多解释了。
接下来解释引入下面这个模块的用途
from direct.showbase.DirectObject import DirectObject
DirectObject是控制运行和消息响应的基础类,如果想在您的程序中添加消息响应,需要在你的类中继承DirectObject类。其他的类引入碰撞体和导入动画模型和光照这里就不做解释了给出DirectObject的类关系图
下面我们来看这个程序的逻辑。
首先找到标记点start point这是ralph的出生点,笔者没有找到关于导入start-point方法的介绍文章,单用这条指令:
pz to egg: punzip -o world.egg world.egg.pz
执行后,翻看world.egg文件发现start point写为如下方式:
<Group> start_point {
<DCS> { net }
<Transform> {
<Matrix4> {
1 0 0 0
0 1 0 0
0 0 1 0
-107.575 -0.490075 -26.6066 1
}
<Translate> { 0 0 0 }
}
}
于是弱弱的将这种写法拷贝到自己的egg文件中也读到了标记点。我准备先放放这里。
鼠标和键盘响应这一部分就不解释了,很好懂。
这里笔者想简单讲一下碰撞体添加的过程:
self.cTrav = CollisionTraverser()
self.ralphGroundRay = CollisionRay()
self.ralphGroundRay.setOrigin(0,0,1000)
self.ralphGroundRay.setDirection(0,0,-1)
self.ralphGroundCol = CollisionNode('ralphRay')
self.ralphGroundCol.addSolid(self.ralphGroundRay)
self.ralphGroundCol.setFromCollideMask(BitMask32.bit(0))
self.ralphGroundCol.setIntoCollideMask(BitMask32.allOff())
self.ralphGroundColNp = self.ralph.attachNewNode(self.ralphGroundCol)
self.ralphGroundHandler = CollisionHandlerQueue()
self.cTrav.addCollider(self.ralphGroundColNp, self.ralphGroundHandler)
首先建立CollisionTraverser来处理碰撞事件,然后建立碰撞体并绑定在ralph的身上:self.ralph.attachNewNode(self.ralphGroundCol)。建立碰撞体分为两步:1、确立碰撞类型self.ralphGroundRay=CollisionRay()和建立碰撞节点并将碰撞类型绑定在碰撞节点上:self.ralphGroundCol=CollisionNode('ralphRay'),self.ralphGroundCol.addSolid(self.ralphGroundRay)。最后建立碰撞处理方式并将碰撞体和碰撞处理句柄绑定在一起:
self.ralphGroundHandler = CollisionHandlerQueue()
self.cTrav.addCollider(self.ralphGroundColNp, self.ralphGroundHandler)
对于碰撞的处理方式,笔者有些不想写了,这个程序是利用task,处理每一帧的碰撞检测。其中涉及到CollisionEntry这个数据结构为碰撞发生时,存入collisionhandle句柄的数据结构如下图。
需要深入了解这个数据结构的朋友还需访问http://www.panda3d.org/manual/index.php/Collision_Entries
首先解读这段代码:
import direct.directbase.DirectStart
这是 from direct.showbase.ShowBase import ShowBase的简写,由panda3d的manual可以查到,而ShowBase是panda3d运行和渲染的基础类,这里不做过多解释了。
接下来解释引入下面这个模块的用途
from direct.showbase.DirectObject import DirectObject
DirectObject是控制运行和消息响应的基础类,如果想在您的程序中添加消息响应,需要在你的类中继承DirectObject类。其他的类引入碰撞体和导入动画模型和光照这里就不做解释了给出DirectObject的类关系图
下面我们来看这个程序的逻辑。
首先找到标记点start point这是ralph的出生点,笔者没有找到关于导入start-point方法的介绍文章,单用这条指令:
pz to egg: punzip -o world.egg world.egg.pz
执行后,翻看world.egg文件发现start point写为如下方式:
<Group> start_point {
<DCS> { net }
<Transform> {
<Matrix4> {
1 0 0 0
0 1 0 0
0 0 1 0
-107.575 -0.490075 -26.6066 1
}
<Translate> { 0 0 0 }
}
}
于是弱弱的将这种写法拷贝到自己的egg文件中也读到了标记点。我准备先放放这里。
鼠标和键盘响应这一部分就不解释了,很好懂。
这里笔者想简单讲一下碰撞体添加的过程:
self.cTrav = CollisionTraverser()
self.ralphGroundRay = CollisionRay()
self.ralphGroundRay.setOrigin(0,0,1000)
self.ralphGroundRay.setDirection(0,0,-1)
self.ralphGroundCol = CollisionNode('ralphRay')
self.ralphGroundCol.addSolid(self.ralphGroundRay)
self.ralphGroundCol.setFromCollideMask(BitMask32.bit(0))
self.ralphGroundCol.setIntoCollideMask(BitMask32.allOff())
self.ralphGroundColNp = self.ralph.attachNewNode(self.ralphGroundCol)
self.ralphGroundHandler = CollisionHandlerQueue()
self.cTrav.addCollider(self.ralphGroundColNp, self.ralphGroundHandler)
首先建立CollisionTraverser来处理碰撞事件,然后建立碰撞体并绑定在ralph的身上:self.ralph.attachNewNode(self.ralphGroundCol)。建立碰撞体分为两步:1、确立碰撞类型self.ralphGroundRay=CollisionRay()和建立碰撞节点并将碰撞类型绑定在碰撞节点上:self.ralphGroundCol=CollisionNode('ralphRay'),self.ralphGroundCol.addSolid(self.ralphGroundRay)。最后建立碰撞处理方式并将碰撞体和碰撞处理句柄绑定在一起:
self.ralphGroundHandler = CollisionHandlerQueue()
self.cTrav.addCollider(self.ralphGroundColNp, self.ralphGroundHandler)
对于碰撞的处理方式,笔者有些不想写了,这个程序是利用task,处理每一帧的碰撞检测。其中涉及到CollisionEntry这个数据结构为碰撞发生时,存入collisionhandle句柄的数据结构如下图。
需要深入了解这个数据结构的朋友还需访问http://www.panda3d.org/manual/index.php/Collision_Entries
相关文章推荐
- 解读支付宝接口程序
- 解读30个提高Web程序执行效率的好经验
- 【经验分享】解读支付宝接口程序
- 对Hadoop自带程序WordCount的解读(转载,自用)
- CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
- CYPEESS USB3.0程序解读之---SPI读写
- CYPEESS USB3.0程序解读之---同步FIFO(slaveFifoSync)
- C:函数指针数组及驱动表程序解读
- 解读30个提高Web程序执行效率的好经验
- 程序解读身份证的密码
- CYPEESS USB3.0程序解读之---SPI读写
- [解读小程序]灵犀新闻客户端
- CYPEESS USB3.0程序解读之---SPI读写
- Modbus RTU程序开发解读
- C:函数指针数组及驱动表程序解读
- 全面解读python web 程序的9种部署方式
- zstack定位程序的学习(3)--盲节点程序解读
- 涉及计算机程序的发明专利申请的解读
- 全面解读python web 程序的9种部署方式
- 解读30个提高Web程序执行效率的好经验