mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
add faceForwardDelta, faceForwardNode
This commit is contained in:
parent
7d7edee889
commit
0f7b6d6c40
@ -18,6 +18,8 @@ class Mopath(DirectObject):
|
||||
self.hprPoint = Point3(0)
|
||||
self.tangentVec = Vec3(0)
|
||||
self.fFaceForward = 0
|
||||
self.faceForwardDelta = None
|
||||
self.faceForwardNode = None
|
||||
self.timeScale = 1
|
||||
self.upVectorNodePath = upVectorNodePath
|
||||
self.reverseUpVector = reverseUpVector
|
||||
@ -118,16 +120,27 @@ class Mopath(DirectObject):
|
||||
self.hprNurbsCurve.getPoint(self.playbackTime, self.hprPoint)
|
||||
node.setHpr(self.hprPoint)
|
||||
elif (self.fFaceForward and (self.xyzNurbsCurve != None)):
|
||||
self.xyzNurbsCurve.getTangent(self.playbackTime, self.tangentVec)
|
||||
#use the self.upVectorNodePath position if it exists to create an up vector for lookAt
|
||||
if self.faceForwardDelta:
|
||||
# Look at a point a bit ahead in parametric time.
|
||||
t = min(self.playbackTime + self.faceForwardDelta, self.xyzNurbsCurve.getMaxT())
|
||||
lookPoint = Point3()
|
||||
self.xyzNurbsCurve.getPoint(t, lookPoint)
|
||||
if self.faceForwardNode:
|
||||
self.faceForwardNode.setPos(lookPoint)
|
||||
else:
|
||||
self.xyzNurbsCurve.getTangent(self.playbackTime, self.tangentVec)
|
||||
lookPoint = self.posPoint + self.tangentVec
|
||||
|
||||
# use the self.upVectorNodePath position if it exists to
|
||||
# create an up vector for lookAt
|
||||
if (self.upVectorNodePath is None):
|
||||
node.lookAt(Point3(self.posPoint + self.tangentVec))
|
||||
node.lookAt(lookPoint)
|
||||
else:
|
||||
if (self.reverseUpVector == False):
|
||||
node.lookAt(Point3(self.posPoint + self.tangentVec),
|
||||
node.lookAt(lookPoint,
|
||||
self.upVectorNodePath.getPos() - self.posPoint)
|
||||
else:
|
||||
node.lookAt(Point3(self.posPoint + self.tangentVec),
|
||||
node.lookAt(lookPoint,
|
||||
self.posPoint - self.upVectorNodePath.getPos())
|
||||
|
||||
def play(self, node, time = 0.0, loop = 0):
|
||||
|
Loading…
x
Reference in New Issue
Block a user