/// <summary> /// Calculates the vector cross product /// </summary> /// <param name="c"></param> /// <param name="thizArg"></param> /// <param name="x"></param> /// <returns> /// The cross product of two 3D vectors. /// </returns> public JsValue VecCross(CpuBlock c, JsValue thizArg, JsValue[] x) { if (x.Length < 1) { throw new Exception("Invalid value"); } var v1obj = ((ObjectInstance)thizArg); var v2obj = ((ObjectInstance)x[0]); Vector3 v1 = BlockUtils.ToVector3(v1obj); Vector3 v2 = BlockUtils.ToVector3(v2obj); return(BlockUtils.Vec2Obj(c, Vector3.Cross(v1, v2))); }
/// <summary> /// Multiply vector3 by scalar /// </summary> /// <param name="c"></param> /// <param name="thizArg"></param> /// <param name="x"></param> /// <returns> /// The result of a vector3 multiplied by scalar. /// </returns> public JsValue VecMul(CpuBlock c, JsValue thizArg, JsValue[] x) { if (x.Length < 1) { throw new Exception("Invalid value"); } var vobj = ((ObjectInstance)thizArg); float f; if (!BlockUtils.TryGetFloat(x[0], out f)) { throw new Exception("Invalid value"); } Vector3 v = BlockUtils.ToVector3(vobj); return(BlockUtils.Vec2Obj(c, v * f)); }
/// <summary> /// Multiply quaternion with either another quaternion or a 3d vector. /// </summary> /// <returns> /// Vector if second argument is vector and quaternion if second argument is quaternion /// </returns> public JsValue QuatMult(CpuBlock c, JsValue thizArg, JsValue[] x) { if (x.Length < 1) { throw new Exception("Invalid value"); } var q1obj = ((ObjectInstance)thizArg); var q2obj = ((ObjectInstance)x[0]); var q1 = BlockUtils.ToQuat(q1obj); if (q2obj.HasProperty("w")) { var q2 = BlockUtils.ToQuat(q2obj); return(BlockUtils.Quat2Obj(c, q1 * q2)); } else { var v = BlockUtils.ToVector3(q2obj); return(BlockUtils.Vec2Obj(c, q1 * v)); } }