AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [OpenGL] - Multitexturing + Texturprojektion
Thema durchsuchen
Ansicht
Themen-Optionen

[OpenGL] - Multitexturing + Texturprojektion

Offene Frage von "Flips"
Ein Thema von Flips · begonnen am 19. Aug 2006
Antwort Antwort
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#1

[OpenGL] - Multitexturing + Texturprojektion

  Alt 19. Aug 2006, 15:37
Hi.

Ich habe einen schönen Raum den ich via Multitexturing Standard-,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):
Delphi-Quellcode:
//[...]
glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);
// Erster Durchgang : Normale Szene zeichnen
// Texturenmatrix sichern und zurücksetzen
glMatrixMode(GL_TEXTURE);
glPushMatrix;
glLoadIdentity;
// In die Modelansicht wechseln und Szene mit aktivierter Beleuchtung und Texturen zeichnen
glMatrixMode(GL_MODELVIEW);
glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
DrawQB(True);
glEnable(GL_TEXTURE_2D);
// Texturenmatrix (in der die Projektorperspektive gesichert wird) wieder zurückholen
glMatrixMode(GL_TEXTURE);
glPopMatrix;
glMatrixMode(GL_MODELVIEW);
glDisable(GL_LIGHTING);
// Texgen-Flächen setzen (werden mit der invertierten Modelansichtsmatrix multiplizert)
P := Vector4f(1,0,0,0); glTexGenfv(GL_S, GL_EYE_PLANE, @P);
P := Vector4f(0,1,0,0); glTexGenfv(GL_T, GL_EYE_PLANE, @P);
P := Vector4f(0,0,1,0); glTexGenfv(GL_R, GL_EYE_PLANE, @P);
P := Vector4f(0,0,0,1); glTexGenfv(GL_Q, GL_EYE_PLANE, @P);
// Automatische Texturkoordinatengeneration aktivieren
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);
// Bleding aktivieren damit der Projektor nicht die komplette Szene überzeichnet
glEnable(GL_BLEND);
glBlendFunc(GL_DST_COLOR, GL_ONE);
// In die Texturenmatrix wechseln und den Projektor ausrichten
glMatrixMode(GL_TEXTURE);
glPopMatrix;
glPushMatrix;
glBindTexture(GL_TEXTURE_2D, TextureBuffer[10].TextureID);
// Position und Ausrichtung des Projektors festlegen (So wie gedrückt)
glTranslatef(x/2, y/2, down/2);
// Szene mit projezierter Textur zeichnen
glMatrixMode(GL_MODELVIEW);
glBindTexture(GL_TEXTURE_2D,0);
DrawQB(False);
glDisable(GL_BLEND);
Die Prozedure DrawQB:
Delphi-Quellcode:
procedure DrawQB(a:boolean);
begin
glActiveTexture(GL_TEXTURE0_ARB);
if a then
  glBindTexture(GL_TEXTURE_2D,TextureBuffer[0].TextureID);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glActiveTexture(GL_TEXTURE1_ARB);
if a then
  glBindTexture(GL_TEXTURE_2D,TextureBuffer[4].TextureID);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glBegin(GL_QUADS);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,0);
  glVertex3f(-0.5,-0.5,0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0,1);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0,1);
  glVertex3f(-0.5,0.5,0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,1);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,1);
  glVertex3f(0.5,0.5,0);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1,0);
glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1,0);
  glVertex3f(0.5,-0.5,0);
glEnd();
end;
Wie gesagt, mit nur einer Textur hat alles geklappt.

Danke im Voraus.
Philipp F.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz