Size: 1323
Comment:
|
Size: 2907
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 51: | Line 51: |
== Collision Handlers == * CollisionHandlerQueue 枚举碰撞 {{{ #!python queue = CollisionHandlerQueue() traverser.addCollider(fromObject, queue) traverser.traverse(render) for i in range(queue.getNumEntries()): entry = queue.getEntry(i) print entry }}} * CollisionHandlerEvent 碰撞时产生事件(in again out) {{{ #!python class MyObject(DirectObject.DirectObject): def __init__(self): self.accept('car-into-rail', handleRailCollision) #接受in事件 def handleRailCollision(self, entry): print entry }}} * CollisionHandlerPusher * PhysicsCollisionHandler * CollisionHandlerFloor == Collision Entries == 碰撞发生时产生Entry,记录碰撞信息 == Collision Traversers == 碰撞检测,付到base.cTrav后,每嵮自动检测 {{{ #!python traverser = CollisionTraverser('traverser name') base.cTrav = traverser traverser.addCollider(fromObject, handler) }}} 只用加入碰撞物(fromObject),不用被碰撞物,所有加入场景的物体自动成为被碰撞物 == 碰撞掩码(Collision Bitmasks) == 碰撞物的“碰撞”掩码和被碰撞物的“被碰撞”掩码相与(AND),如果结果不等于0——意味着两个掩码至少有一位相同——那么进行碰撞测试。 * nodePath.node().setFromCollideMask(BitMask32(0x10)) #设置碰撞掩码,必须在node上设置,不能在nodePath上设 * nodePath.setCollideMask(BitMask32(0x04), BitMask32(0xff)) #设置被碰撞掩码 * GeomNode.getDefaultCollideMask() #得到被碰撞掩码 |
基础
组成结构
- 树型结构
Render -> NodePath -> PandaNode(Geom)[GeomVertexData, GeomPrimitive]
GeomVertexData 保存顶点数据, GeomPrimitive 保存顶点的index
坐标
- render(3d) X右,Y前,Z上
- render2d 坐标左下角(-1,0,-1)到右上角(1,0,1)
移动、形变
位移 NodePath.setPos(X,Y,Z) #位移
旋转 NodePath.setHpr(H,P,R)
- 旋转方向
- Heading: 绕Y轴转
- Pitch: 绕X轴转
- Roll: 绕Z轴转
- 旋转的例子: attachment:hprtest.py 使用simples/tutorial1中的model
- 旋转方向
缩放 NodePath.setScale(uniform) #
文件格式
EGG
==== 创建EGG ===
EggData()
- .addChild
- .addVertex
- .recomputePolygonNormal
EggVertexPool()
- .addVertex
- .loadEggData()
镜头
- base.camera
地形
高度图算法
=== Diamond-Square Algorithm ==
碰撞
== solid ==
CollisionPolygon 多边型 (昂贵,不准确)
CollisionRay 射线
CollisionLine 双向射线
CollisionSegment 两点间线
Collision Handlers
CollisionHandlerEvent 碰撞时产生事件(in again out)
Collision Entries
碰撞发生时产生Entry,记录碰撞信息
Collision Traversers
碰撞检测,付到base.cTrav后,每嵮自动检测
只用加入碰撞物(fromObject),不用被碰撞物,所有加入场景的物体自动成为被碰撞物
碰撞掩码(Collision Bitmasks)
碰撞物的“碰撞”掩码和被碰撞物的“被碰撞”掩码相与(AND),如果结果不等于0——意味着两个掩码至少有一位相同——那么进行碰撞测试。
nodePath.node().setFromCollideMask(BitMask32(0x10)) #设置碰撞掩码,必须在node上设置,不能在nodePath上设
nodePath.setCollideMask(BitMask32(0x04), BitMask32(0xff)) #设置被碰撞掩码
GeomNode.getDefaultCollideMask() #得到被碰撞掩码
基础
- .setCollideMask
- .setIntoCollideMask
- .setFromCollideMask