Ejemplo n.º 1
0
        public void Test_ToUnityVector()
        {
            OpenTK.Vector4d openTKvector = new OpenTK.Vector4d(1.0, 2.0, 3.0, 4.0);

            Vector4 actual   = openTKvector.ToUnityVector();
            Vector4 expected = new Vector4(1.0f, 2.0f, 3.0f, 4.0f);

            Assert.AreEqual(
                actual: actual,
                expected: expected
                );
        }
Ejemplo n.º 2
0
 public static void MultiplyMatrix4x4ByVector4(out OpenTK.Vector4d resultvector,
                                               OpenTK.Matrix4d matrix, OpenTK.Vector4d pvector)
 {
     resultvector.X = matrix.M11 * pvector.X + matrix.M12 * pvector.Y +
                      matrix.M13 * pvector.Z + matrix.M14 * pvector.W;
     resultvector.Y = matrix.M21 * pvector.X + matrix.M22 * pvector.Y +
                      matrix.M23 * pvector.Z + matrix.M24 * pvector.W;
     resultvector.Z = matrix.M31 * pvector.X + matrix.M32 * pvector.Y +
                      matrix.M33 * pvector.Z + matrix.M34 * pvector.W;
     resultvector.W = matrix.M41 * pvector.X + matrix.M42 * pvector.Y +
                      matrix.M43 * pvector.Z + matrix.M44 * pvector.W;
 }
Ejemplo n.º 3
0
        public static int GluUnProject(double winx, double winy, double winz,
                                       double[] modelview, double[] projection, int[] viewport,
                                       out double objectX, out double objectY, out double objectZ)
        {
            objectX = 0;
            objectY = 0;
            objectZ = 0;

            // Transformation matrices
            OpenTK.Matrix4d projectionM = new OpenTK.Matrix4d(
                projection[0], projection[4], projection[8], projection[12],
                projection[1], projection[5], projection[9], projection[13],
                projection[2], projection[6], projection[10], projection[14],
                projection[3], projection[7], projection[11], projection[15]);
            OpenTK.Matrix4d modelviewM = new OpenTK.Matrix4d(
                modelview[0], modelview[4], modelview[8], modelview[12],
                modelview[1], modelview[5], modelview[9], modelview[13],
                modelview[2], modelview[6], modelview[10], modelview[14],
                modelview[3], modelview[7], modelview[11], modelview[15]);
            // Calculation for inverting a matrix, compute projection x modelview
            // and store in A[16]
            OpenTK.Matrix4d AM = projectionM * modelviewM;
            // Now compute the inverse of matrix A
            OpenTK.Matrix4d mM = OpenTK.Matrix4d.Invert(AM);

            // Transformation of normalized coordinates between -1 and 1
            OpenTK.Vector4d inV = new OpenTK.Vector4d();
            inV.X = ((winx - viewport[0]) / viewport[2] * 2.0 - 1.0);
            inV.Y = ((winy - viewport[1]) / viewport[3] * 2.0 - 1.0);
            inV.Z = (2.0 * winz - 1.0);
            inV.W = 1.0;
            OpenTK.Vector4d outV;
            // Objects coordinates
            MultiplyMatrix4x4ByVector4(out outV, mM, inV);
            if (outV.Z == 0.0)
            {
                return(0);
            }
            outV.W  = (1.0 / outV.W);
            objectX = outV.X * outV.W;
            objectY = outV.Y * outV.W;
            objectZ = outV.Z * outV.W;

            /*
             * System.Diagnostics.Debug.WriteLine("GluUnProject");
             * System.Diagnostics.Debug.WriteLine("objectX = " + objectX);
             * System.Diagnostics.Debug.WriteLine("objectY = " + objectY);
             * System.Diagnostics.Debug.WriteLine("objectZ = " + objectZ);
             */
            return(1);
        }
Ejemplo n.º 4
0
        private static void DetectMapperMarkerVisible(int myMarkerID, ref List <clsPGPoint> pts, bool useDatums)
        {
            double[] myMatrix = new double[16] {
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
            };
            ARToolKitFunctions.Instance.arwGetTrackablePatternConfig(myMarkerID, 0, myMatrix, out float width, out float height, out int imageSizeX, out int imageSizeY, out int barcodeID);

            double[] mv = new double[16] {
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
            };
            if (ARToolKitFunctions.Instance.arwQueryTrackableMapperTransformation(myMapperMarkerID, barcodeID, mv))
            {
                OpenTK.Matrix4d matrix = new OpenTK.Matrix4d(mv[0], mv[1], mv[2], mv[3], mv[4], mv[5], mv[6], mv[7], mv[8], mv[9], mv[10], mv[11], mv[12], mv[13], mv[14], mv[15]);
                var             pt     = new OpenTK.Vector4d(mv[12], mv[13], mv[14], 0);
                if (!useDatums)
                {
                    if (myMarkerID < 50)
                    {
                        pt = new OpenTK.Vector4d(140.0f, -45.0f, 0.0f, 1);
                        pt = OpenTK.Vector4d.Transform(pt, matrix);
                    }
                    else if (myMarkerID < 100)
                    {
                        pt = new OpenTK.Vector4d(140.0, 45.0, 0.0f, 1);
                        pt = OpenTK.Vector4d.Transform(pt, matrix);
                    }
                }
                else
                {
                    if (myMarkerID - 2 >= 0 && myMarkerID - 2 < 50)
                    {
                        pt = new OpenTK.Vector4d(160.0f, -45.0f, 0.0f, 1);
                        pt = OpenTK.Vector4d.Transform(pt, matrix);
                    }
                    else if (myMarkerID - 2 >= 50 && myMarkerID - 2 < 100)
                    {
                        pt = new OpenTK.Vector4d(160.0, 45.0, 0.0f, 1);
                        pt = OpenTK.Vector4d.Transform(pt, matrix);
                    }
                }

                pts.Add(new clsPGPoint(pt.X, pt.Y, pt.Z, myMarkerID, barcodeID));
            }
        }
Ejemplo n.º 5
0
 public static LDDModder.Simple3D.Vector4d ToLDD(this OpenTK.Vector4d vector)
 {
     return(new Simple3D.Vector4d(vector.X, vector.Y, vector.Z, vector.W));
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 拡張メソッド.
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static V4d Mult(this M4d m, V4d v) => new V4d(
     m.M11 * v.X + m.M12 * v.Y + m.M13 * v.Z + m.M14 * v.W,
     m.M21 * v.X + m.M22 * v.Y + m.M23 * v.Z + m.M24 * v.W,
     m.M31 * v.X + m.M32 * v.Y + m.M33 * v.Z + m.M34 * v.W,
     m.M41 * v.X + m.M42 * v.Y + m.M43 * v.Z + m.M44 * v.W
     );
Ejemplo n.º 7
0
 /// <summary>
 /// 拡張メソッド.
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static C4 ToC4(this V4d v) => new C4((float)v.X, (float)v.Y, (float)v.Z, (float)v.W);
Ejemplo n.º 8
0
 /// <summary>
 /// 拡張メソッド.
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static float[] ToArrayF(this V4d v) => new[] { (float)v.X, (float)v.Y, (float)v.Z, (float)v.W };
Ejemplo n.º 9
0
 /// <summary>
 /// 拡張メソッド.
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static double[] ToArray(this V4d v) => new[] { v.X, v.Y, v.Z, v.W };
Ejemplo n.º 10
0
 /// <summary>
 /// 拡張メソッド.
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static V3f ToV3f(this V4d v) => new V3f((float)v.X, (float)v.Y, (float)v.Z);
Ejemplo n.º 11
0
 /// <summary>
 /// 拡張メソッド.
 /// </summary>
 /// <param name="v"></param>
 /// <returns></returns>
 public static V4f ToV4f(this V4d v) => new V4f((float)v.X, (float)v.Y, (float)v.Z, (float)v.W);