Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

26.11.2008, 20:42

OpenGL mehrere Texturen laden

Wie kann ich mehrere Texturen laden und dann zb. Textur 1 auf ein viereck anweden und Textur 2 auf ein Quadrat anwenden welches sich neben dem viereck befindet.
Ich weiß wie ich ein und die sebe Textur auf beide objekte anwenden kann, aber nicht wie ich verschieden laden kann.

2

26.11.2008, 20:45

Du kannst nach dem ersten Objekt einfach deine zweite Textur aktivieren.
Beim Laden genauso, du lädst 2 Texturen und speicherst den Rückgabe Wert z.b. in 2 verschiedenen Variablen.
Lieber dumm fragen, als dumm bleiben!

3

26.11.2008, 21:50

Ich bekomm es irgendwie nicht hin o.O

Wie aktivieren ich ein zweite Textur?

4

26.11.2008, 22:01

Genauso wie die erste (mit glBindTexture). Du solltest deine Quellen bezüglich Texturen am besten nochmal sehr genau lesen.
Lieber dumm fragen, als dumm bleiben!

Anonymous

unregistriert

5

26.11.2008, 22:06

Les diesen Thread und kauf das von mir empfohlene Buch!

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=10334&highlight=opengl+programming

Diese NeHe-Scheisse ist das Letzte und kann kein gutes Buch ersetzen. Ist ja schlimm, wenn man als Anfänger nicht mal Checkt wie man eine Textur setzt, weil diese Tutorials oder diese noch katastrophaleren deutschen "Übersetzungen" so schlecht sind.

6

26.11.2008, 22:36

oje irgendwie check das nicht so ganz. Machen tu ich alles nach diesem tutorial hier : http://www.codeworx.org/opengl_tut6.php

Wie ich es verstanden hab, wird eine Textur aus einer BMP datei geladen und dann in 'Textur' konvertiert. mit glBindTexture teile ich opengl nur mit das es sich um eine 2d textur handelt. Mehr aber auch nicht o.O

Anonymous

unregistriert

7

26.11.2008, 22:38

DEATH
Dieses Tutorial ist Dreck, nennen wir das Kind einfach beim Namen. Kauf dir ein anständiges Buch! Du kannst nichts gutes Lernen, wenn du nur scheiss Tutorials benutzt, die schon in der Grundform das Letzte waren.

8

26.11.2008, 22:40

srry hab deinen vorhergehenden Beitrag nicht lesen können weil ich die site nicht aktualiest hab...

Danke für den Buchtipp! Scheint interessant und gut zu sein ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

26.11.2008, 23:48

Zitat von »"DEATH"«

mit glBindTexture teile ich opengl nur mit das es sich um eine 2d textur handelt


Wer verzapft so nen krassen Unsinn? :) Mit glBindTexture bindest du einen Texturnamen an ein bestimmtes Texturtarget. Dieses "Ziel" kann eine 1D-, 2D oder 3D Textur sein, wie auch immer...
Der Texturname ist ein vorzeichenloser Integer der für eine bestimmte Textur steht. Wenn du also zwei Texturen hast kannst hat jede der Texturen einen eindeutigen Namen (z.B. 1 und 2). Wenn du Textur '1' verwenden willst musst du den Namen binden, willst du Textur '2' verwenden bindest du den Name '2' uswusf...

Also Grundlegend sieht das so aus:

Erstellen einer neuen Textur

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
GLuint name;
glGenTextures( 1, &name ); // Erzeugt EINE Textur und schreibt den Namen der Textur in die Variable 'name'


glBindTexture( GL_TEXTURE_2D, name ); // Bindet die eben erzeugte Textur, d.h. OpenGL verwendet für alle Texturspezifischen Operationen genau _diese_ Textur


// Setzt einige eigenschaften für die Textur (für genauere Infos siehe [1])

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

// Definiert die Textur (füllt die Textur mit den entsprechenden Pixeldaten)

glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height, border, format, type, data);


Wiederholst du den Vorgang nun wird eine zweite Textur erzeugt und du hast in 'name' den Namen der zweiten Textur stehen. Willst du nun eine Textur auf ein Polygon mappen musst du den entsprechenden Namen zuerst binden (OpenGL mitteilen welche Textur verwendet werden soll).

C-/C++-Quelltext

1
2
3
4
5
6
7
glBindTexture( GL_TEXTURE_2D, 1 ); // Bindet die erste Textur


// Daten rendern + Texturkoordinaten -> Textur '1' wird verwendet


glBindTexture( GL_TEXTURE_2D, 2 ); // Bindet die zweite Textur


// Daten rendern + Texturkoordinaten -> Texture '2' wird verwendet


Wichtig ist natürlich auch das Texturmapping für das Texturziel (hier durch GL_TEXTURE_2D angegeben) eingeschaltet ist:

C-/C++-Quelltext

1
glEnable( GL_TEXTURE_2D );


Texturmapping ausschalten läuft dann natürlich über das Gegenstück:

C-/C++-Quelltext

1
glDisable( GL_TEXTURE_2D );


Irgendwann brauchst du die Texturen vielleicht nicht mehr, d.h. du kannst Resourcen freigeben sodass GL diese wieder verwenden kann:

C-/C++-Quelltext

1
2
GLuint name = 1; 
glDeleteTextures( 1, &name ); // löscht Textur mit name '1'


Noch ein Wort zum Texturnamen '0'. Wird dieser an ein Texturziel gebunden wird keine Textur angezeigt.

[1]: http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/texparameter.html
@D13_Dreinig

Werbeanzeige