private void RecursiveDraw(OM.Drawable drawable) { if (!drawable.Visible) return; if (drawable is OM.Model) { DrawModel(drawable as OM.Model); } else if (drawable is OM.IndexedMesh) { DrawMesh(drawable as OM.IndexedMesh); } else if (drawable is OM.PlaceBase) { OM.PlaceBase place = drawable as OM.PlaceBase; for (int i = 0; i < place.Length; i++) RecursiveDraw(place[i]); } }
private void DrawMesh(OM.IndexedMesh mesh) { if (mesh.Indices.Length < 3 || mesh.Vertices.Length == 0) return; Drawer.Texture = mesh.TextureResource.Data as Texture2D; Drawer.World = Matrix.CreateScale(mesh.AbsoluteScale.ToXNAVector3()) * mesh.AbsoluteRotationMatrix.ToXNAMatrix() * Matrix.CreateTranslation(mesh.AbsolutePosition.ToXNAVector3()); Drawer.View = Matrix.CreateLookAt(CurrentWorld.CameraPosition.ToXNAVector3(), CurrentWorld.CameraTarget.ToXNAVector3(), Vector3.Up); Drawer.Diffuse = mesh.Diffuse.ToXNAVector3(); Drawer.Lighting = mesh.Lighting; VertexPositionNormalTextureColor[] varr = mesh.Vertices.ToXNAVertexArray(); int[] iarr = mesh.Indices.ToXNAIndices(); Drawer.DrawIndexedTriangleList(varr,iarr); }
private void DrawModel(OM.Model m) { throw new NotImplementedException(); }
void CurrentWorld_Redirected(object sender, OM.RedirectedEventArgs e) { Navigate(e.NewUrl); }