public CurveResult Evaluate(float curveT, ref CurveResult result) { //CurveResult result = new CurveResult(); unsafe { fixed(CurveResult *p = &result) { SDK_GfxICurve_EvaluateNative(mCoreObject, curveT, p); } } return(result); }
public override void Evaluate(float curveT, Binding.AnimationElementBinding bindingElement) { var binding = bindingElement as BoneAnimationBinding; if (binding == null) { return; } var boneCurve = Curve as CGfxBoneCurve; CurveResult curveResult = new CurveResult(); curveResult.BoneSRTResult = binding.Bone.Transform; curveResult = boneCurve.Evaluate(curveT, ref curveResult); binding.MotionData = boneCurve.EvaluateMotionState(curveT); binding.Value = curveResult; }
/// Bezier : /// Evaluate a Bezier curve at a particular parameter value /// Fill in control points for resulting sub-curves if "Left" and /// "Right" are non-null. /// /// - int degree; Degree of bezier curve /// - Point2* V; Control pts /// - double t; Parameter value private static CurveResult Curve(Vector2[] V, int degree, double t) { const int WDegree = 5; Vector2[,] Vtemp = new Vector2[5 + 1, WDegree + 1]; // Copy control points for (var j = 0; j <= degree; j++) { Vtemp[0, j] = V[j]; } // Triangle computation for (var i = 1; i <= degree; i++) { for (var j = 0; j <= degree - i; j++) { Vtemp[i, j] = new Vector2 { X = (1.0 - t) * Vtemp[i - 1, j].X + t * Vtemp[i - 1, j + 1].X, Y = (1.0 - t) * Vtemp[i - 1, j].Y + t * Vtemp[i - 1, j + 1].Y }; } } var result = new CurveResult { Point = Vtemp[degree, 0], LeftCurve = new Vector2[WDegree + 1], RightRight = new Vector2[WDegree + 1] }; for (var i = 0; i <= degree; i++) { result.LeftCurve[i] = Vtemp[i, 0]; result.RightRight[i] = Vtemp[degree - i, i]; } return(result); }