Entwickler-Ecke
Multimedia / Grafik - mehrere Texturen über GLBitmap-Loader in OpenGL aktivieren?
Knappe Franz - Di 22.01.08 01:35
Titel: mehrere Texturen über GLBitmap-Loader in OpenGL aktivieren?
Hey Leute,
ich sitze an einem Info-Projekt. Im Moment bin ich dabei das Spielfeld zu gestalten. Es ist ein Rechteck bestehend aus 36*29 Quads, die ich mit 2 For-to-do-Schleifen zeichnen lasse. Jetzt will ich jedem Feld eine spezielle Textur zuweisen (Wiese, Weg,...). Ich hab mir dazu alles zum Texturen laden und verwenden durchgelesen, was ich so im DGL-Wiki gefunden hab und kann auch problemlos EINE Textur ins Programm laden und auf den Quads anzeigen lassen. Ich habe mich strikt an die Anweisungen wie sie bei GLBitmap-Loader stehen gehalten.
Jetzt habe ich allerdings versucht in Abhängigkeit eines Parameters eben auf eine Art Quads die Wiesentextur zu laden und auf die andere Art die Wegetextur. Allerdings hat das nicht geklappt.
Kann mich nun bitte jemand aufklären, ob ich in dieser Instanz:
var fTexture: TglBitmap2D; // Instanz unserer Textur
auch mehrere Texturen laden und unabhängig abrufen kann oder ob ich mir ein Array dieser Instanz oder sowas in der Art anschaffen muss um jede Textur einzeln zu behandeln? Und warum reagieren die fTexture.Bind; -Befehle nicht, wenn ich mehrere Texturen auf die letztgenannte Art lade?
Danke für eure Hilfe und Gute Nacht!
Knappe Franz
Lossy eX - Di 22.01.08 10:02
Nein. Du kannst in eine Instanz der Klasse
TglBitmap2D nur eine einzige Textur laden. Da bin ich mir ziemlich sicher. ;)
Das ist aber auch nicht unbedingt der typische Anwednungsfall in OpenGL. Du hast in OpenGL normal mehrere Texturen und je nachdem welche du gerade benutzen möchtest bindest du die entsprechende Textur. Und genau so verhält sich das auch mit der
TglBitmap2D. Wenn du 3 unterschiedliche Texturen haben möchtest benötigst du auch 3 eigenständige Instanzen der Klasse
TglBitmap2D. Und das Laden bitte nach dem Initialisieren von OpenGL. Nicht zwischendurch beim Zeichnen.
Definition
1:
| fTextures: array[0..2] of TglBitmap2D; |
Texturen laden
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| fTextures[0] := TglBitmap2D.Create; fTextures[0].LoadFromFile(...); fTextures[0].GenTexture();
fTextures[1] := TglBitmap2D.Create; fTextures[1].LoadFromFile(...); fTextures[1].GenTexture();
fTextures[2] := TglBitmap2D.Create; fTextures[2].LoadFromFile(...); fTextures[2].GenTexture(); |
In deinem Spielfeld bräuchtest du jetzt nur noch Bezug auf den Index des Textur Arrays nehmen und zeichnen.
Zeichnen
1: 2:
| fTextures[SpielFeld[X, Y].TextureIdx].Bind; |
Knappe Franz - Di 22.01.08 15:27
Danke erstmal für die Antwort! Ich hatte genau das schon probiert gehabt. Leider hat es nicht funktioniert. Er hat trotzdem immer nur die Textur angezeigt, die ich als letztes hochgeladen habe. Und scheinbar ignoriert er meine Bind-Befehle beim zeichnen komplett...
Kann es daran liegen, dass ich glenable(GL_TEXTURE_2D); oder ähnliches falsch positioniert habe? Oder muss ich die Texturen an einer anderen bestimmten Stelle hochladen?
Lossy eX - Di 22.01.08 16:02
Ja du hast Recht. Dein Bind wird ignoriert. Denn zwischen glBegin und glEnd darf so etwas nicht gemacht werden. Wie viele viele andere Operationen auch. Wenn du deine Textur davor bindest sollte alles klar gehen.
Knappe Franz - Di 22.01.08 23:27
Super!! Es funktioniert! Danke dir - und das der Fehler so simpel war freut mich natürlich umso mehr^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!