Ejemplo n.º 1
0
        public Vec3 WorldFromTrack2D(Vec3 p)
        {
            Scene  scene   = SharedWorld.MainScene;
            Camera cam     = scene.Camera;
            Box3   vvol    = cam.ViewVol;
            float  camdist = cam.Translation.Length;
            float  zdist   = camdist - ZOffset;
            Vec3   w       = new Vec3();
            Vec3   v       = new Vec3();
            Matrix mtx     = new Matrix();
            float  tmp     = 0.5f * vvol.Height / vvol.min.z;

            v.x = p.x * tmp * zdist;
            v.y = p.y * tmp * zdist;
            v.z = -zdist;
            cam.TotalTransform(mtx);
            mtx.Transform(v, w);
            SharedWorld.Trace(System.String.Format(Name + " Track({0}, {1}, {2}) -> World({3}, {4}, {5})\n", p.x, p.y, p.z, w.x, w.y, w.z));
            return(w);
        }
Ejemplo n.º 2
0
        public Vec3 WorldFromScreen(Vec3 pos)
        {
            Scene  scene = SharedWorld.MainScene;
            Camera cam   = scene.Camera;
            Box3   vv    = cam.ViewVol;
            Vec3   p     = Normalize(pos);
            Matrix mtx   = cam.GetViewTrans();
            Vec3   w     = new Vec3(vv.min.x + p.x * vv.Width,
                                    vv.max.y - p.y * vv.Height,
                                    vv.min.z - p.z * vv.Depth + ZOffset);
            float tmp = -0.5f * w.z / cam.Hither;

            tmp  = -w.z / cam.Hither;
            w.x *= tmp;
            w.y *= tmp;
            cam.TotalTransform(mtx);
            mtx.Transform(w, w);
            SharedWorld.Trace(System.String.Format(Name + " Screen({0}, {1}, {2}) -> World({3}, {4}, {5})\n", pos.x, pos.y, pos.z, w.x, w.y, w.z));
            return(w);
        }