ProfilProfil
 Registrieren
 Login
Bild der WocheBild der Woche

(von Backslider)
Kommentare (0)
*****

Weitere
User onlineBenutzer online
Gäste online: 4
Mitglieder online: Keine
Registrierte Mitglieder: 2191
Neustes Mitglied: Marvinxxy

Skydome

Autor: Astror Enales

Inhaltsverzeichnis

  1. Einleitung
  2. Vorbereitung
  3. Der Code
  4. Alternative
  5. Ende

^ Einleitung


Was ist überhaupt ein Skydome, wird sich der eine oder andere fragen.
Ein Skydome ist eine Halbkugel, welche die Spiellandschaft überspannt und mittels einer Textur den Himmel darstellt.
Normal mit nur einer Wolkentextur, kann dies natürlich noch weiter entwickelt werden mit verschiedenen Wolkenschichten und Bewegung mit Hilfe von Shadern. In diesem Tutorial soll es aber erst einmal um die Grundlegenden Dinge eines Skydomes gehen.




^ Vorbereitung


Um anfangen zu können, benötigen wir zuerst einmal zwei Dinge. Zum einen die Wolkentextur und zum anderen das Model des Skydomes.

Diese Dateien werden später ganz einfach über den Content Ordner hinzugefügt.

^ Der Code


Nun zum Einbau des Skydomes in unser Spiel.

Als Erstes werden die Textur und das Model definiert.
Zusätzlich noch ein Vector3, welcher die Spielerposition repräsentiert.
Model skyDome;
Texture2D skydomeTex;
Vector3 PlayerPosition = Vector3.Zero;

Diese werden nun über den ContentManager in das Spiel geladen.
skyDome = Content.Load<Model>("skydome");
skydomeTex = Content.Load<Texture2D>("skydometex");

Um den Skydome zu zeichnen, fügen wir folgendes in die Draw Methode ein.
foreach (ModelMesh mesh in skyDome.Meshes)
{
  foreach (BasicEffect ef in mesh.Effects)
  {
    ef.World = Matrix.CreateScale(1000) * //Skydome soll alles überspannen, je nach größe des Spielfeldes anpassen
    Matrix.CreateTranslation(PlayerPosition);
    ef.View = view;
    ef.Projection = projection;

    ef.TextureEnabled = true; //Textur zulassen
    ef.Texture = skydomeTex; //Textur auf Model darstellen
  }
  mesh.Draw();
}

Was hier passiert ist leicht erklärt.
Das Skydome Model wird gezeichnet und dabei werden verschiedene Parameter an den BasicEffect des Meshes übergeben.
Die World-Matrix wird auf die 1000fache Größe skaliert um die komplette Spielwelt zu überspannen und positioniert wird das Ganze an der Position des Spielers.
View und Projection sind die Kamera-Matrizen auf die in diesem Tutorial nicht eingegangen wird.
TextureEnabled bedeutet, wie der Name schon sagt, dass dieses Model eine Textur besitzt und es auch mit einer gezeichnet wird.
Als Letztes wird dann die Skydome-Textur an den Parameter Texture übergeben.

^ Alternative


Da man nicht immer weiß, wie groß die Spiellandschaft ist, gibt es noch eine andere Möglichkeit außer der Skalierung des Skydomes.
Hierfür verwenden wir den DepthBuffer.
Dies machen wir, indem wir bevor wir das Model des Skydomes zeichnen folgende Werte ändern:
GraphicsDevice.RenderState.DepthBufferEnable = false;
GraphicsDevice.RenderState.DepthBufferWriteEnable = false;

und nach dem Zeichnen diese Werte wieder auf true setzten.
GraphicsDevice.RenderState.DepthBufferEnable = true;
GraphicsDevice.RenderState.DepthBufferWriteEnable = true;


^ Ende


Dies ist auch schon das Ende dieses kurzen Artikels.
Vielen Dank für das Durcharbeiten und wie immer sind Kritiken, sowie Verbesserungsvorschläge willkommen.

Infos

Name: Skydome
Autor: Astror Enales
Kommentare: Thread