mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 16:58:40 -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.hprPoint = Point3(0)
|
||||||
self.tangentVec = Vec3(0)
|
self.tangentVec = Vec3(0)
|
||||||
self.fFaceForward = 0
|
self.fFaceForward = 0
|
||||||
|
self.faceForwardDelta = None
|
||||||
|
self.faceForwardNode = None
|
||||||
self.timeScale = 1
|
self.timeScale = 1
|
||||||
self.upVectorNodePath = upVectorNodePath
|
self.upVectorNodePath = upVectorNodePath
|
||||||
self.reverseUpVector = reverseUpVector
|
self.reverseUpVector = reverseUpVector
|
||||||
@ -118,16 +120,27 @@ class Mopath(DirectObject):
|
|||||||
self.hprNurbsCurve.getPoint(self.playbackTime, self.hprPoint)
|
self.hprNurbsCurve.getPoint(self.playbackTime, self.hprPoint)
|
||||||
node.setHpr(self.hprPoint)
|
node.setHpr(self.hprPoint)
|
||||||
elif (self.fFaceForward and (self.xyzNurbsCurve != None)):
|
elif (self.fFaceForward and (self.xyzNurbsCurve != None)):
|
||||||
self.xyzNurbsCurve.getTangent(self.playbackTime, self.tangentVec)
|
if self.faceForwardDelta:
|
||||||
#use the self.upVectorNodePath position if it exists to create an up vector for lookAt
|
# 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):
|
if (self.upVectorNodePath is None):
|
||||||
node.lookAt(Point3(self.posPoint + self.tangentVec))
|
node.lookAt(lookPoint)
|
||||||
else:
|
else:
|
||||||
if (self.reverseUpVector == False):
|
if (self.reverseUpVector == False):
|
||||||
node.lookAt(Point3(self.posPoint + self.tangentVec),
|
node.lookAt(lookPoint,
|
||||||
self.upVectorNodePath.getPos() - self.posPoint)
|
self.upVectorNodePath.getPos() - self.posPoint)
|
||||||
else:
|
else:
|
||||||
node.lookAt(Point3(self.posPoint + self.tangentVec),
|
node.lookAt(lookPoint,
|
||||||
self.posPoint - self.upVectorNodePath.getPos())
|
self.posPoint - self.upVectorNodePath.getPos())
|
||||||
|
|
||||||
def play(self, node, time = 0.0, loop = 0):
|
def play(self, node, time = 0.0, loop = 0):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user