Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 13:30

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: mehrere Texturen
BeitragVerfasst: Fr Jan 20, 2006 19:36 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 16:52
Beiträge: 20
Hallo,

Ich möchte zwei Texturen laden und diese jeweils einem Quad zuweisen.
Das Laden mache ich bisher so:
Code:
  1.  
  2. PROCEDURE TForm1.LoadTexture;
  3. var
  4.   tex : ARRAY[0..1] OF PSDL_Surface;
  5. begin
  6.   tex[0] := IMG_Load('./brick01.jpg');
  7.   tex[1] := IMG_Load('./marmor02.jpg');
  8.   if assigned(tex[0]) then
  9.   begin
  10.     glGenTextures(1, @texture[0]);
  11.     glGenTextures(1, @texture[1]);
  12.  
  13.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  14.     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  15.  
  16.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex[0]^.w, tex[0]^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex[0]^.pixels);
  17.     glTexImage2D(GL_TEXTURE_2D, 0, 3, tex[1]^.w, tex[1]^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex[1]^.pixels);
  18.  
  19.     SDL_FreeSurface(tex[0]);
  20.     SDL_FreeSurface(tex[1]);
  21.   end;
  22. END;
  23.  

Wobei texture[..] ein globales Array vom Typ gluInt ist.

Das Zeichnen mache ich dann so:
Code:
  1.  
  2.   glEnable(GL_TEXTURE_2D);
  3.   glBindTexture(GL_TEXTURE_2D, texture[1]);
  4.   glBegin(GL_QUADS);
  5.     glTexCoord2f(0,0); glVertex3f(XMin*100,0,-ZMin*100);
  6.     glTexCoord2f(1,0); glVertex3f(XMax*100,0,-ZMin*100);
  7.     glTexCoord2f(1,1); glVertex3f(XMax*100,0,-ZMax*100);
  8.     glTexCoord2f(0,1); glVertex3f(XMin*100,0,-ZMax*100);
  9.   glEnd;
  10.   glBindTexture(GL_TEXTURE_2D, texture[0]);
  11.   glBegin(GL_QUADS);
  12.     glVertex3f(XMin*100,40,-ZMin*100);
  13.     glVertex3f(XMax*100,40,-ZMin*100);
  14.     glVertex3f(XMax*100,40,-ZMax*100);
  15.     glVertex3f(XMin*100,40,-ZMax*100);
  16.   glEnd;
  17.  


Nur leider zeichnet er keine Texturen. Ich bekomme nur weiße Flächen. Was mache ich falsch?

mfg, Lt.Cmd.Data

// Lossy: Pascal Tags


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 20, 2006 19:45 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Bitte benutz die Pascal Tags um Code darzustellen. Danke.

Beim Laden musst du die ID der entsprechenden Textur binden. Und du musst das Laden dann auch seriell anstelle von parallel gestalten.
Code:
  1. PROCEDURE TForm1.LoadTexture;
  2. var
  3.   tex : PSDL_Surface;
  4. begin
  5.   // 2 Texturen generieren
  6.   glGenTextures(2, @texture[0]);
  7.  
  8.   // Textur 1
  9.   tex := IMG_Load('./brick01.jpg');
  10.   glBind(GL_TEXTURE_2D, texture[0]);
  11.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  12.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  13.  
  14.   glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  15.   SDL_FreeSurface(tex);
  16.  
  17.   // Textur 2
  18.   tex := IMG_Load('./marmor02.jpg');
  19.   glBind(GL_TEXTURE_2D, texture[1]);
  20.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  21.   glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  22.  
  23.   glTexImage2D(GL_TEXTURE_2D, 0, 3, tex^.w, tex^.h,0, GL_RGB, GL_UNSIGNED_BYTE, tex^.pixels);
  24.   SDL_FreeSurface(tex);
  25. end;

Jede Textur brauch ihre eigenen einstelleungen und immer erst eine nach der anderen, da es sonst nicht geht.

Beim Zeichnen musst du natürlich auch darauf achten, dass alle deine texturierten Flächen auch Texturkoordinaten bekommen. Ohne weiß OpenGL ja nicht wie sie anzubringen sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 20, 2006 19:58 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 16:52
Beiträge: 20
Super, funktioniert. Danke.

Das mit den Delphi-Tags werd ich beim nächsten Mal beachten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 20, 2006 20:15 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Und sofern ich es sehe, ist dies auch ein klassicher Fall, wo evtl. Multitexturing Sinn machen kann. Zumindest wenn es wirklich "ein und dasselbe Quad" sein soll.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 15 Queries | GZIP : On ]