// // Helper functions // internal static T CreateExpressionNode <T>() where T : class { T newNode; if (typeof(T) == typeof(BooleanNode)) { newNode = new BooleanNode() as T; } else if (typeof(T) == typeof(ScalarNode)) { newNode = new ScalarNode() as T; } else if (typeof(T) == typeof(Vector2Node)) { newNode = new Vector2Node() as T; } else if (typeof(T) == typeof(Vector3Node)) { newNode = new Vector3Node() as T; } else if (typeof(T) == typeof(Vector4Node)) { newNode = new Vector4Node() as T; } else if (typeof(T) == typeof(ColorNode)) { newNode = new ColorNode() as T; } else if (typeof(T) == typeof(QuaternionNode)) { newNode = new QuaternionNode() as T; } else if (typeof(T) == typeof(Matrix3x2Node)) { newNode = new Matrix3x2Node() as T; } else if (typeof(T) == typeof(Matrix4x4Node)) { newNode = new Matrix4x4Node() as T; } else { throw new Exception("unexpected type"); } return(newNode); }
/// <summary> Creates a quaternion that rotates around an arbitrary vector. </summary> /// <param name="axis">Rotation axis</param> /// <param name="angle">Angle, in radians.</param> public static QuaternionNode CreateQuaternionFromAxisAngle(Vector3Node axis, ScalarNode angle) { return(Function <QuaternionNode>(ExpressionNodeType.QuaternionFromAxisAngle, axis, angle)); }
public static Vector3Node Conditional(BooleanNode condition, Vector3Node trueCase, Vector3Node falseCase) { return(Function <Vector3Node>(ExpressionNodeType.Conditional, condition, trueCase, falseCase)); }
public static Matrix4x4Node CreateScale(Vector3Node val) { return(Function <Matrix4x4Node>(ExpressionNodeType.Matrix4x4FromScale, val)); }
/// <summary> Creates a matrix that rotates around an arbitrary vector. </summary> /// <param name="axis">Rotation axis</param> /// <param name="angle">Angle, in radians.</param> public static Matrix4x4Node CreateMatrix4x4FromAxisAngle(Vector3Node axis, ScalarNode angle) { return(Function <Matrix4x4Node>(ExpressionNodeType.Matrix4x4FromAxisAngle, axis, angle)); }
public static Vector3Node Scale(Vector3Node val1, ScalarNode val2) { return(Function <Vector3Node>(ExpressionNodeType.Scale, val1, val2)); }
public static Matrix4x4Node CreateTranslation(Vector3Node val) { return(Function <Matrix4x4Node>(ExpressionNodeType.Matrix4x4FromTranslation, val)); }
public static Vector3Node Mod(Vector3Node val1, Vector3Node val2) { return(Function <Vector3Node>(ExpressionNodeType.Modulus, val1, val2)); }
public static Vector3Node Normalize(Vector3Node val) { return(Function <Vector3Node>(ExpressionNodeType.Normalize, val)); }
public static Vector3Node Lerp(Vector3Node val1, Vector3Node val2, ScalarNode progress) { return(Function <Vector3Node>(ExpressionNodeType.Lerp, val1, val2, progress)); }
public static ScalarNode LengthSquared(Vector3Node val) { return(Function <ScalarNode>(ExpressionNodeType.LengthSquared, val)); }
public static ScalarNode DistanceSquared(Vector3Node val1, Vector3Node val2) { return(Function <ScalarNode>(ExpressionNodeType.DistanceSquared, val1, val2)); }
public static Vector3Node Clamp(Vector3Node val, Vector3Node min, Vector3Node max) { return(Function <Vector3Node>(ExpressionNodeType.Clamp, val, min, max)); }
public static Vector3Node Abs(Vector3Node val) { return(Function <Vector3Node>(ExpressionNodeType.Absolute, val)); }