Exemplo n.º 1
0
        public Vector3d TransformPickPointToWorldSpace(Vector2d ptCursor, double backBufferWidth, double backBufferHeight)
        {
            Vector3d vPickRayOrig;
            Vector3d vPickRayDir;

            Vector3d v = new Vector3d();
            v.X = (((2.0f * ptCursor.X) / backBufferWidth) - 1) / (RenderContext.Projection.M11);// / (backBufferWidth / 2));
            v.Y = (((2.0f * ptCursor.Y) / backBufferHeight) - 1) / (RenderContext.Projection.M22);// / (backBufferHeight / 2));
            v.Z = 1.0f;

            Matrix3d m = Matrix3d.MultiplyMatrix(RenderContext.View, RenderContext.World);

            m.Invert();

            vPickRayDir = new Vector3d();
            vPickRayOrig = new Vector3d();
            // Transform the screen space pick ray into 3D space
            vPickRayDir.X = v.X * m.M11 + v.Y * m.M21 + v.Z * m.M31;
            vPickRayDir.Y = v.X * m.M12 + v.Y * m.M22 + v.Z * m.M32;
            vPickRayDir.Z = v.X * m.M13 + v.Y * m.M23 + v.Z * m.M33;

            vPickRayDir.Normalize();

            return vPickRayDir;
        }
Exemplo n.º 2
0
        public static Vector2d GetUVFromInnerPoint(Vector3d ul, Vector3d ur, Vector3d ll, Vector3d lr, Vector3d pnt)
        {
            ul.Normalize();
            ur.Normalize();
            ll.Normalize();
            lr.Normalize();
            pnt.Normalize();

            double dUpper = LineToPoint(ul, ur, pnt);
            double dLower = LineToPoint(ll, lr, pnt);
            double dVert = dUpper + dLower;

            double dRight = LineToPoint(ur, lr, pnt);
            double dLeft = LineToPoint(ul, ll, pnt);
            double dHoriz = dRight + dLeft;

            return Vector2d.Create(dLeft / dHoriz, dUpper / dVert);
        }
Exemplo n.º 3
0
        private bool IsLeftOfHalfSpace(Vector3d pntA, Vector3d pntB, Vector3d pntTest)
        {
            pntA.Normalize();
            pntB.Normalize();
            Vector3d cross = Vector3d.Cross(pntA, pntB);

            double dot = Vector3d.Dot(cross, pntTest);

            return dot > 0;
        }
Exemplo n.º 4
0
        public void MakeNormal()
        {
            Vector3d a = A.Position.Copy();
            Vector3d b = B.Position.Copy();
            Vector3d c = C.Position.Copy();

            a.Normalize();
            b.Normalize();
            c.Normalize();

            double x = a.X + b.X + c.X;
            double y = a.Y + b.Y + c.Y;
            double z = a.Z + b.Z + c.Z;

            Normal = Vector3d.Create(x / 3, y / 3, z / 3);
            Normal.Normalize();
        }