'
' This example illustrates how to interpolate the pose of object C
' between objects A and B
'
option explicit
dim alpha : alpha = 0.25
' CREATE OBJECTS A & B
dim A : set A = ActiveSceneRoot.AddNull("A")
dim B : set B = ActiveSceneRoot.AddNull("B")
' GET GLOBAL TRANSFORM OF A & B
dim gksA : set gksA = A.Kinematics.Global
dim gksB : set gksB = B.Kinematics.Global
dim tgA : set tgA = gksA.Transform
dim tgB : set tgB = gksB.Transform
' TRANSLATE & ROTATE A
dim vA : set vA = XSIMath.CreateVector3(2, 2, 0)
tgA.SetTranslation vA
dim rA : set rA = XSIMath.CreateRotation( 0, 0, XSIMath.DegreesToRadians(45) )
tgA.SetRotation rA
gksA.Transform = tgA
' TRANSLATE & ROTATE B
dim vB : set vB = XSIMath.CreateVector3(-2, 2, 0)
tgB.SetTranslation vB
dim rB : set rB = XSIMath.CreateRotation( 0, 0, XSIMath.DegreesToRadians(-45) )
tgB.SetRotation rB
gksB.Transform = tgB
' GET ROTATION MATRIX OF A & B
dim mA : set mA = XSIMath.CreateMatrix3
tgA.GetRotationMatrix3 mA
dim mB : set mB = XSIMath.CreateMatrix3
tgB.GetRotationMatrix3 mB
' DO A SLERP BETWEEN THE ROTATION MATRICES
dim qA : set qA = XSIMath.CreateQuaternion
mA.GetQuaternion qA
dim qB : set qB = XSIMath.CreateQuaternion
mB.GetQuaternion qB
dim qC : set qC = XSIMath.CreateQuaternion
qC.Slerp qA, qB, alpha
' DO A LINEAR INTERPOLATE OF POSITION
dim vC : set vC = XSIMath.CreateVector3
vC.LinearlyInterpolate vA, vB, alpha
' CREATE A NEW OBJECT AND SET ITS ROTATION
' AND TRANSLATE WITH INTERPOLATED RESULTS
dim C : set C = ActiveSceneRoot.AddNull("C")
dim gksC : set gksC = C.Kinematics.Global
dim tgC : set tgC = gksC.Transform
dim mC : set mC = XSIMath.CreateMatrix3
mC.SetFromQuaternion qC
tgC.SetRotationFromMatrix3 mC
tgC.SetTranslation vC
gksC.Transform = tgC |