add faceForwardDelta, faceForwardNode

This commit is contained in:
David Rose 2011-09-13 23:15:30 +00:00
parent 7d7edee889
commit 0f7b6d6c40

View File

@ -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):