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

Aktuelle Zeit: Fr Jul 18, 2025 21:01

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Multitexturing + Texturprojektion
BeitragVerfasst: Mi Aug 16, 2006 11:01 
Offline
DGL Member

Registriert: Mi Aug 09, 2006 15:47
Beiträge: 44
Wohnort: St. Wendel
Programmiersprache: Delphi, C#, Java, C
Hi.
Nachdem ich endlich freigeschaltet wurde (Danke an Phobeus und Delphic, habt ja prompt reagiert :D ) kommt auch hier meine erste Frage.

Ich habe einen schönen Raum den ich via Multitexturing Standart-,Detail- und Lichttexturen verschönere.
Jetzt wollte ich auf diese Wand eine 4. Textur projezieren lassen.
Wie man das bei normalem Texturmapping macht weiß ich, aber wie macht man das bei Multitexturing?
Habe schon versucht die Projezierte Textur extra auf eine 4. Texturebene binden zu lassen, aber das geht wahrscheinlich deshalb nicht, da ich nicht weiß wie man OpenGL sagt auf welcher Ebene es automatisch Texturkoordinaten generieren soll.
Daher meine Frage: Wie kann ich eine Textur auf eine mit Multitexturing "tapezierte Wand" projezieren?

Hier der Code (ist fast identisch mit dem von delphigl.de, kommt daher):
Code:
  1.  
  2. //[...]
  3. glDisable(GL_TEXTURE_GEN_S);
  4. glDisable(GL_TEXTURE_GEN_T);
  5. glDisable(GL_TEXTURE_GEN_R);
  6. glDisable(GL_TEXTURE_GEN_Q);
  7. // Erster Durchgang : Normale Szene zeichnen
  8. // Texturenmatrix sichern und zurücksetzen
  9. glMatrixMode(GL_TEXTURE);
  10.  glPushMatrix;
  11.  glLoadIdentity;
  12.  // In die Modelansicht wechseln und Szene mit aktivierter Beleuchtung und Texturen zeichnen
  13.  glMatrixMode(GL_MODELVIEW);
  14.  glEnable(GL_LIGHTING);
  15.  glEnable(GL_TEXTURE_2D);
  16.  DrawQB(True);
  17.  glEnable(GL_TEXTURE_2D);
  18.  // Texturenmatrix (in der die Projektorperspektive gesichert wird) wieder zurückholen
  19.  glMatrixMode(GL_TEXTURE);
  20.  glPopMatrix;
  21. glMatrixMode(GL_MODELVIEW);
  22. glDisable(GL_LIGHTING);
  23. // Texgen-Flächen setzen (werden mit der invertierten Modelansichtsmatrix multiplizert)
  24. P := Vector4f(1,0,0,0); glTexGenfv(GL_S, GL_EYE_PLANE, @P);
  25. P := Vector4f(0,1,0,0); glTexGenfv(GL_T, GL_EYE_PLANE, @P);
  26. P := Vector4f(0,0,1,0); glTexGenfv(GL_R, GL_EYE_PLANE, @P);
  27. P := Vector4f(0,0,0,1); glTexGenfv(GL_Q, GL_EYE_PLANE, @P);
  28. // Automatische Texturkoordinatengeneration aktivieren
  29. glEnable(GL_TEXTURE_GEN_S);
  30. glEnable(GL_TEXTURE_GEN_T);
  31. glEnable(GL_TEXTURE_GEN_R);
  32. glEnable(GL_TEXTURE_GEN_Q);
  33. // Bleding aktivieren damit der Projektor nicht die komplette Szene überzeichnet
  34. glEnable(GL_BLEND);
  35. glBlendFunc(GL_DST_COLOR, GL_ONE);
  36. // In die Texturenmatrix wechseln und den Projektor ausrichten
  37.  
  38. glMatrixMode(GL_TEXTURE);
  39.  glPopMatrix;
  40.  glPushMatrix;
  41.  glBindTexture(GL_TEXTURE_2D, TextureBuffer[10].TextureID);
  42.  // Position und Ausrichtung des Projektors festlegen (So wie gedrückt)
  43.  glTranslatef(x/2, y/2, down/2);
  44. // Szene mit projezierter Textur zeichnen
  45. glMatrixMode(GL_MODELVIEW);
  46. glBindTexture(GL_TEXTURE_2D,0);
  47. DrawQB(False);
  48. glDisable(GL_BLEND);
  49.  


Die Prozedure DrawQB:
Code:
  1.  
  2.  procedure DrawQB(a:boolean);
  3.  begin
  4.  
  5.    glActiveTexture(GL_TEXTURE0_ARB);
  6.    if a then
  7.    glBindTexture(GL_TEXTURE_2D,TextureBuffer[0].TextureID);
  8.    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  9.  
  10.    glActiveTexture(GL_TEXTURE1_ARB);
  11.    if a then
  12.    glBindTexture(GL_TEXTURE_2D,TextureBuffer[4].TextureID);
  13.    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  14.  glBegin(GL_QUADS);
  15.    glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0);
  16.    glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  17.    glVertex3f(-0.5,-0.5,0);
  18.    glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1);
  19.    glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  20.    glVertex3f(-0.5,0.5,0);
  21.    glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1);
  22.    glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  23.    glVertex3f(0.5,0.5,0);
  24.    glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0);
  25.    glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  26.    glVertex3f(0.5,-0.5,0);
  27.  glEnd();
  28.  end;
  29.  


Wie gesagt, mit nur einer Textur hat alles geklappt.

Danke im Voraus.

Flips


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.007s | 16 Queries | GZIP : On ]