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); }
/// <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; }
protected void Render(Node obj) { obj.Render(); }
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 + "."); }
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 + "."); }
/// <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; }
/// <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; }