Game Engine Math

KWEngine, Teil 12: Hintergrundbilder und Texturen verwenden

1)
Einbinden eines 2D-Hintergrundbilds

public class GameWorld : World
{
    private float _offsetY = 0f;

    public override void Act()
    {
        // Jeden Frame wird ein Feld erhöht, was die Verschiebung
        // des Hintergrundbilds beinhaltet. 
        _offsetY += 0.01f;

        // Diese Verschiebung (_offset) wird dann auf das aktuelle
        // Hintergrundbild angewendet:
        SetBackground2DOffset(0, _offsetY);
    }
     
    public override void Prepare()
    {
        // Setzen des Hintergrundbildes mit Skalierung: 100% / 100%
        SetBackground2D("./texturefolder/background.jpg");
        SetBackground2DRepeat(1.0f, 1.0f);
    }
}
  • Die entsprechende Bilddatei muss sich innerhalb des Projektverzeichnisses (z.B. in einem separaten Unterordner) befinden.
  • In der Prepare()-Methode wird das Hintergrundbild einmalig gesetzt.
  • Außerdem muss jede Bilddatei in Visual Studio einmalig als „vorhandenes Element“ hinzugefügt werden und anschließend in den VS-Dateieigenschaften (Rechtsklick auf die hinzugefügte Datei) so eingestellt werden, dass die Eigenschaft „In Ausgabeverzeichnis kopieren“ den Wert „kopieren, wenn neuer“ bekommt. Nur dann ist die Textur in der fertigen Anwendung auffindbar (siehe Abbildung unten)
  • Soll das Hintergrundbild jeden Frame ein wenig verschoben werden, wird dies in der Act()-Methode der Welt-Klasse erledigt (siehe Code oben).

2)
Einbinden eines 3D-Hintergrundbilds („skybox“)

public class GameWorld : World
{
    public override void Act()
    {
        
    }
     
    public override void Prepare()
    {
        // Setzen des 3D-Hintergrundbildes:
        SetBackgroundSkybox("./texturefolder/skybox.jpg");
    }
}
  • Die entsprechende Bilddatei muss sich innerhalb des Projektverzeichnisses (z.B. in einem separaten Unterordner) befinden.
  • In der Prepare()-Methode wird das Hintergrundbild einmalig gesetzt.
  • Außerdem muss jede Bilddatei in Visual Studio einmalig als „vorhandenes Element“ hinzugefügt werden und anschließend in den VS-Dateieigenschaften (Rechtsklick auf die hinzugefügte Datei) so eingestellt werden, dass die Eigenschaft „In Ausgabeverzeichnis kopieren“ den Wert „kopieren, wenn neuer“ bekommt. Nur dann ist die Textur in der fertigen Anwendung auffindbar (siehe Abbildung unten)
2.1) Skybox-Formate
  • Eine Skybox kann als „unified cube map“ oder als „Gleichwinkelbild (equirectangular image)“ vorliegen (siehe folgende Abbildungen):
Beispiel: Unified Cube Map
Beispiel: Gleichwinkelbild
// Weiteres Beispiel für das Setzen einer Cube-Map-Textur 
// mit 180° Rotation um die Y-Achse:
SetBackgroundSkybox("./texturefolder/skybox.jpg", 180);

// Alternativ hier ein Beispiel für das Verwenden eines 
// Gleichwinkelbilds mit 0° Rotation:
SetBackgroundSkybox("./texturefolder/equirectangular.jpg", 0, SkyboxType.Equirectangular);

3)
Würfel und Kugeln mit Texturen ausstatten

Wenn Sie für Ihre GameObject-Instanzen die Modelle KWCube oder KWSphere verwenden, können Sie den Objekten Texturen zuweisen.
Gültige Texturformate sind:

  • JPG
  • PNG
  • DDS (mit EXT1, 3 oder 5 Kompression)
public class GameWorld : World
{
    public override void Act()
    {
        
    }
     
    public override void Prepare()
    {
        Player p1 = new Player();
        p1.SetModel("KWCube");
        p1.SetTexture("./texturefolder/myTexture.jpg");
        AddGameObject(p1);
    }
}
  • Die entsprechende Bilddatei muss sich innerhalb des Projektverzeichnisses (z.B. in einem separaten Unterordner) befinden.
  • Außerdem muss jede Bilddatei in Visual Studio einmalig als „vorhandenes Element“ hinzugefügt werden und anschließend in den VS-Dateieigenschaften (Rechtsklick auf die hinzugefügte Datei) so eingestellt werden, dass die Eigenschaft „In Ausgabeverzeichnis kopieren“ den Wert „kopieren, wenn neuer“ bekommt. Nur dann ist die Textur in der fertigen Anwendung auffindbar (siehe Abbildung weiter oben).

4)
Würfel mit unterschiedlichen Texturen ausstatten

Ist Ihre Kameraperspektive so gewählt, dass sie gleichzeitig die Seiten und die oben aufliegende Fläche eines Würfels sehen können, so können Sie stattdessen das Modell KWPlatform verwenden, um den verschiedenen Würfelseiten unterschiedliche Texturen zu geben:

public class GameWorld : World
{
    public override void Act()
    {
        
    }
     
    public override void Prepare()
    {
        Wall w1 = new Wall();
        w1.SetModel("KWPlatform");

        // Setze Textur für oben/unten:
        w1.SetTexture("./texturefolder/texTopBottom.jpg", TextureType.Albedo, 0);

        // Setze Textur für links/rechts:
        w1.SetTexture("./texturefolder/texLeftRight.jpg", TextureType.Albedo, 1);

        // Setze Textur für vorne/hinten:
        w1.SetTexture("./texturefolder/texFrontBack.jpg", TextureType.Albedo, 2);

        AddGameObject(w1);
    }
}

(Der Texturtyp „Albedo“ bezeichnet die normale Farbtextur eines Objekts.)


Beitrag veröffentlicht

in

von

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.