瀏覽代碼

add faceForwardDelta, faceForwardNode

David Rose 14 年之前
父節點
當前提交
0f7b6d6c40
共有 1 個文件被更改,包括 18 次插入5 次删除
  1. 18 5
      direct/src/directutil/Mopath.py

+ 18 - 5
direct/src/directutil/Mopath.py

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