Spaceship.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. using Microsoft.Xna.Framework;
  2. using Microsoft.Xna.Framework.Content;
  3. using Microsoft.Xna.Framework.Graphics;
  4. using nkast.Aether.Shaders;
  5. namespace Samples.Deferred
  6. {
  7. public class Spaceship
  8. {
  9. Model model;
  10. public void Load(ContentManager content)
  11. {
  12. model = content.Load<Model>("spaceship");
  13. }
  14. public void Draw(Matrix world, Matrix view, Matrix projection)
  15. {
  16. foreach (ModelMesh mesh in model.Meshes)
  17. {
  18. foreach (BasicEffect effect in mesh.Effects)
  19. {
  20. effect.World = world;
  21. effect.View = view;
  22. effect.Projection = projection;
  23. effect.EnableDefaultLighting();
  24. effect.DiffuseColor = new Vector3(0.6f);
  25. effect.EmissiveColor = new Vector3(0.6f);
  26. }
  27. mesh.Draw();
  28. }
  29. }
  30. internal void DrawDeferred(GraphicsDevice device, DeferredBasicEffect deferredBasicEffect, Matrix world, Matrix view, Matrix projection)
  31. {
  32. deferredBasicEffect.World = world;
  33. deferredBasicEffect.View = view;
  34. deferredBasicEffect.Projection = projection;
  35. foreach (var mesh in model.Meshes)
  36. {
  37. foreach (var part in mesh.MeshParts)
  38. {
  39. deferredBasicEffect.CurrentTechnique.Passes[0].Apply();
  40. device.Textures[0] = ((BasicEffect)part.Effect).Texture;
  41. device.SetVertexBuffer(part.VertexBuffer);
  42. device.Indices = part.IndexBuffer;
  43. device.DrawIndexedPrimitives(PrimitiveType.TriangleList,
  44. part.VertexOffset, 0, part.NumVertices,
  45. part.StartIndex, part.PrimitiveCount);
  46. }
  47. }
  48. }
  49. }
  50. }