Collision Example 1¶
collision.py¶
1# © 2024 Autodesk, Inc. All rights reserved.
2
3# Collision demo
4
5newScene()
6
7####################
8# create 3 objects #
9####################
10obja = createBox(2, 2, 2, 1, 1, 1, 1, 0, 0, 0)
11obja.makeTransform()
12obja.setTranslation(-5, 0, 0)
13
14objb = loadGeometry("$VRED_EXAMPLES/geo/teddy.osb")
15objb.makeTransform()
16objb.setScale(0.01, 0.01, 0.01)
17objb.setTranslation(0, 0, 0)
18
19objc = createBox(2, 2, 2, 1, 1, 1, 0, 0, 1, 0)
20objc.makeTransform()
21objc.setTranslation(5, 0, 0)
22
23updateScene()
24
25
26########################################################################
27# find Teddy_Bear node and rotate around axis 360 degrees in 8 seconds #
28########################################################################
29head = findNode("Teddy_Bear")
30
31# create a rotation axis and hide it (only needed)
32# to pass to vrRotationAxisSlide command
33axis = createLine(0, 0, 0, 0, 0, 1, 0, 0, 0);
34hideNode(axis)
35
36head.makeTransform()
37rotInt = vrInterpolator()
38rotSlide = vrRotationAxisSlide(head, axis, 0, 359, 8.0)
39rotInt.add(rotSlide)
40rotInt.setActive(true)
41
42##################################################
43# define class to translate an object on x-axis. #
44##################################################
45class ActionTranslate(vrAEBase):
46 tx = 0.0
47 ty = 0.0
48 tz = 0.0
49 txs = 0.1
50 def __init__(self, node):
51 vrAEBase.__init__(self)
52 self.addLoop()
53 self.node = node
54 def recEvent(self, state):
55 vrAEBase.recEvent(self, state)
56 def loop(self):
57 if self.isActive() == true:
58 self.node.setTranslation(self.tx, self.ty, self.tz)
59 self.tx = self.tx + self.txs
60
61##################################################
62# instantiate translation object and activate it #
63##################################################
64move = ActionTranslate(objb)
65move.setActive(true)
66
67##################################################
68# output information about the collision #
69##################################################
70def printCollisionInfo(coll):
71 useWorldSpace = True
72 collidingNodes = coll.getCollidingNodes()
73 print("Collision Nodes: First: " + str(collidingNodes[0]) + ", Second: " + str(collidingNodes[1]))
74 collisionPosition = coll.getCollisionPoint(useWorldSpace)
75 print("Collision Position: " + str(collisionPosition))
76 collidingIndices = coll.getCollidingTriangleIndices()
77 print("Colliding Triangle Indices: First: " + str(collidingIndices[0]) + ", Second: " + str(collidingIndices[1]))
78 collidingTriangles = coll.getCollidingTriangles(useWorldSpace)
79 print("Colliding Triangles: First: " + str(collidingTriangles[0]) + ", " + str(collidingTriangles[1]) + ", " + str(collidingTriangles[2]))
80 print("Colliding Triangles: Second: " + str(collidingTriangles[3]) + ", " + str(collidingTriangles[4]) + ", " + str(collidingTriangles[5]))
81 collisionInfo = coll.getCollisionInfo(useWorldSpace)
82 print("Collision Info: Point: " + str(collisionInfo[0]))
83 print("Collision Info: First Node: " + str(collisionInfo[1]) + ", Normal: " + str(collisionInfo[2]))
84 print("Collision Info: Second Node: " + str(collisionInfo[3]) + ", Normal: " + str(collisionInfo[4]))
85
86##################################
87# generate collision object #
88# when collision happens reverse #
89# the translation direction #
90##################################
91coll1 = vrCollision([obja], [head])
92coll1.connect("move.txs *= -1;coll1.setActive(false);coll2.setActive(true)")
93coll1.connect(printCollisionInfo, coll1)
94
95##################################
96# generate collision object #
97# when collision happens reverse #
98# the translation direction #
99##################################
100coll2 = vrCollision([objc], [head])
101coll2.connect("move.txs *= -1;coll1.setActive(true);coll2.setActive(false)")
102coll2.connect(printCollisionInfo, coll2)