Beispiel #1
0
 void Translate(Node obj)
 {
     // liikuta haluttuun kohtaan
     GL.Translate(obj.Position + obj.ObjCenter);
     GL.Rotate(obj.Rotation.X, 1, 0, 0);
     GL.Rotate(obj.Rotation.Y, 0, 1, 0);
     GL.Rotate(obj.Rotation.Z, 0, 0, 1);
     GL.Rotate(obj.FixRotation.X, 1, 0, 0);
     GL.Rotate(obj.FixRotation.Y, 0, 1, 0);
     GL.Rotate(obj.FixRotation.Z, 0, 0, 1);
 }
Beispiel #2
0
 /// <summary>
 /// aseta obj seuraamaan pathia. jos obj on Mesh ja lookAtNextPoint==true, objekti kääntyy pathin suuntaan
 /// </summary>
 /// <param name="obj"></param>
 /// <param name="loop"></param>
 /// <param name="lookAtNextPoint"></param>
 public void FollowPath(Node obj, bool loop, bool lookAtNextPoint)
 {
     attachedObj = obj;
     obj.Position = path[0];
     this.Looping = loop;
     this.LookAtNextPoint = lookAtNextPoint;
 }
Beispiel #3
0
 protected void Render(Node obj)
 {
     obj.Render();
 }
Beispiel #4
0
        public void Remove(Node obj)
        {
            objects.Remove(obj);
            if (obj is Light)
            {
                Light.Remove((Light)obj);
            }
            else if (obj is Camera)
            {
                Camera.cam = null;
            }

            Log.WriteDebugLine(obj.Name + " removed from " + Name + ".");
        }
Beispiel #5
0
        public void Add(Node obj)
        {
            objects.Add(obj);

            if (obj is Light)
            {
                Light.Lights.Add((Light)obj);
            }
            else if (obj is Camera)
            {
                Camera.cam = (Camera)obj;
            }

            Log.WriteDebugLine(obj.Name + " added to " + Name + ".");
        }
Beispiel #6
0
        /// <summary>
        /// palauttaa true jos objektin boundingbox osuu toisen objektin boundingboxiin
        /// </summary>
        /// <param name="group"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="mesh"></param>
        /// <returns></returns>
        /*public static bool CheckCollisionBB_BB(ref Node group, Vector3 start, Vector3 end, ref Mesh obj)
        {
            // TODO: collision bb_bb
            return false;
        }*/
        /// <summary>
        /// palauttaa true jos objektin boundingboxin joku kulma osuu johonkin polyyn groupissa
        /// </summary>
        /// <param name="group"></param>
        /// <param name="start"></param>
        /// <param name="end"></param>
        /// <param name="mesh"></param>
        /// <returns></returns>
        public static bool CheckCollisionBB_Poly(ref Node group, Vector3 start, Vector3 end, ref Mesh obj)
        {
            Vector3 len = start - end;
            if (Math.Abs(len.X + len.Y + len.Z) < Epsilon) return false;

            // tarkista objektin bbox
            if (CheckBB_Poly(ref group, len, ref obj, ref obj) == true) return true;

            // ei osunut joten tsekataan joka meshin bbox erikseen.
            //TODO: --liian hidas
            /*for (int q = 0; q < obj.Meshes().Count; q++)
            {
                Mesh m = obj.Meshes()[q];
                if (CheckBB_Poly_Rec(ref group, start, end, len, ref m, ref obj ) == true) return true;
            }*/

            return false;
        }
Beispiel #7
0
 /// <summary>
 /// tarkistaa meshin bboxin törmäyksen groupissa oleviin objekteihin. meshillä ei välttämättä ole Positionnia, joten obj -objektia
 /// käytetään antamaan paikka ja tarkistukseen ettei tarkisteta törmäystä itteensä.
 /// </summary>
 /// <param name="group"></param>
 /// <param name="len"></param>
 /// <param name="mesh"></param>
 /// <param name="obj"></param>
 /// <returns></returns>
 private static bool CheckBB_Poly(ref Node group, Vector3 len, ref Mesh mesh, ref Mesh obj)
 {
     for (int q = 0; q < group.Objects.Length; q++)
     {
         if (group.Objects[q] is Mesh) // vain meshit tarkistetaan
         {
             if (group.Objects[q] != mesh && group.Objects[q] != obj)
             {
                 // tarkistetaan bounding boxin kulmat, yrittääkö läpäistä jonkun polyn
                 for (int c = 0; c < 8; c++)
                 {
                     Vector3 v = mesh.Boundings.Corner[c];
                     v += obj.Position; // huom. objektin position, koska meshillä ei välttämättä ole paikkaa.
                     Vector3 endv = v + len;
                     Mesh msh = (Mesh)group.Objects[q];
                     if (CheckIntersection(ref v, ref endv, ref msh) == true)
                     {
                         return true;
                     }
                 }
             }
         }
     }
     return false;
 }