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

Aktuelle Zeit: Fr Jul 18, 2025 12:43

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



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme mit glMultiTexCoord
BeitragVerfasst: Di Feb 14, 2006 14:13 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Hallo,

ich versuche schon seit längerer Zeit, Detailmapping zu implementieren. Leider mit dem Effekt, dass ich von dem vorher sichtbaren Würfel jetzt gar nichts mehr sehen kann. Weder untexturierte noch texturierte Flächen. Der Else-Zweig zeigt wie es vorher gelaufen ist (wenn keine der beiden Texturen existiert). Das funktioniert jetzt auch noch. Wenn ich aber in den If-Zweig komme, sehe ich keine Seite des Würfels mehr.

Wenn ich die glMultiTexCoord2d im Else-Zweig mit glMultitexCoord (GL_TEXTURE0, ...) ersetze, klappt das auch noch.

BaseTexture und StruTexture sind boolsche Variablen die mir sagen, dass die Textur da ist und benutzt werden kann.
FPlaneBaseTexUnit ist GL_TEXTURE0
FPlaneStruTexUnit ist GL_TEXTURE1
TextureUnits stehen 8 zur Verfügung

Die Daten der Strukturen stimmen, das habe ich jetzt schon 100mal überprüft...


Danke


Code:
  1.  
  2.     if BaseTexture then
  3.     begin
  4.       // setup texture units and bind textures
  5.       // base texture
  6.       glActiveTexture (FPlaneBaseTexUnit);
  7.       glEnable (GL_TEXTURE_2D);
  8.       glBindTexture (GL_TEXTURE_2D, FPlaneBaseTexture.TextureID);
  9.       glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  10.       // detail texture
  11.       if StruTexture then
  12.       begin
  13.         glActiveTexture (FPlaneStruTexUnit);
  14.         glEnable (GL_TEXTURE_2D);
  15.         glBindTexture (GL_TEXTURE_2D, FPlaneStruTexture.TextureID);
  16.         glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  17.       end;
  18.        // jede fläche des würfels abarbeiten
  19.       for Plane := low (CubeData) to high (CubeData) do
  20.       begin
  21.         // Normale für die fläche definieren
  22.         glNormal3dv (@CubeData[Plane].Normale);
  23.         // jeden punkt des rechtecks abarbeiten
  24.         for Vertex := low (CubeData[Plane].Corners) to
  25.                       high (CubeData[Plane].Corners) do
  26.         begin
  27.           glBegin (GL_QUADS);
  28.             // Texturkoordinaten für den aktuellen eckpunkt der
  29.             // basistextur festlegen
  30.             glMultiTexCoord2d(FPlaneBaseTexUnit,
  31.                               CubeData[Plane].Corners[Vertex].Data.s,
  32.                               CubeData[Plane].Corners[Vertex].Data.t);
  33.             // die position im koordinatensystem für den aktuellen
  34.             // eckpunkt festlegen
  35.             glVertex3dv(@CubeData[Plane].Corners[Vertex].Data.Vector);
  36.             if StruTexture then
  37.             begin
  38.               // Texturkoordinaten für den aktuellen eckpunkt der
  39.               // detailtextur festlegen
  40.               glMultiTexCoord2d(FPlaneStruTexUnit,
  41.                                 CubeData[Plane].Corners[Vertex].Data.s,
  42.                                 CubeData[Plane].Corners[Vertex].Data.t);
  43.               // die position im koordinatensystem für den aktuellen
  44.               // eckpunkt festlegen
  45.               glVertex3dv(@CubeData[Plane].Corners[Vertex].Data.Vector);
  46.             end;
  47.           glEnd;
  48.         end;
  49.       end
  50.     end
  51.     else
  52.     begin
  53.       for Plane := low (CubeData) to high (CubeData) do
  54.       //for Plane := low (CubeData) to low (CubeData)+0 do
  55.       begin
  56.         // Normale für die fläche definieren
  57.         glNormal3dv (@CubeData[Plane].Normale);
  58.         glBegin (GL_QUADS);
  59.           for Vertex := low (CubeData[Plane].Corners) to
  60.                         high (CubeData[Plane].Corners) do
  61.           begin
  62.               glTexCoord2d(CubeData[Plane].Corners[Vertex].Data.s,
  63.                            CubeData[Plane].Corners[Vertex].Data.t);
  64.               glVertex3dv(@CubeData[Plane].Corners[Vertex].Data.Vector);
  65.           end;
  66.         glEnd;
  67.       end;
  68.     end;
  69.  


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 14, 2006 14:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
"glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);" Das Replace erscheint mir auf dem ersten Blick fehl am Platze. Da ersetzt ja jeweils die nächste Textur die vorhergehende. Versucha mal mit GL_MODULATE!

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: war ein dummer fehler
BeitragVerfasst: Di Feb 14, 2006 17:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jun 09, 2005 13:48
Beiträge: 117
Wohnort: Sankt Augustin
Habe es jetzt doch endlich herausgefunden, war ein typischer Nachlässigkeitssichnacherindieohrenbeissprogrammiererfehler. Die Programmstruktur stimmte einfach nicht. Ich habe einige Sachen außerhalb des glBegin (GL_QUADS) ... glEnd Blocks ausgeführt, was eigentlich dort hinein gehört.

So ist es richtig:

Code:
  1.  
  2.     // die normalen aller flächen berechnen
  3.     for Plane := low (CubeData) to high (CubeData) do
  4.     begin
  5.       CubeData[Plane].Normale := CalcNormale (CubeData[Plane].NormalBase1,
  6.                                               CubeData[Plane].NormalBase2,
  7.                                               CubeData[Plane].NormalBase3);
  8.     end;
  9.  
  10.     FPlaneList := glGenLists (1);
  11.     glNewList(FPlaneList, GL_COMPILE_AND_EXECUTE);
  12.     if BaseTexture then
  13.     begin
  14.       // setup texture units and bind textures
  15.       // base texture
  16.       glActiveTexture (FPlaneBaseTexUnit);
  17.       glEnable (GL_TEXTURE_2D);
  18.       glBindTexture (GL_TEXTURE_2D, FPlaneBaseTexture.TextureID);
  19.       glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
  20.       glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_REPLACE);
  21.     end;
  22.     // detail texture
  23.     if StruTexture then
  24.     begin
  25.       glActiveTexture (FPlaneStruTexUnit);
  26.       glEnable (GL_TEXTURE_2D);
  27.       glBindTexture (GL_TEXTURE_2D, FPlaneStruTexture.TextureID);
  28.       glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
  29.       glTexEnvf (GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INCR);
  30.     end;
  31.      // jede fläche des würfels abarbeiten
  32.     for Plane := low (CubeData) to high (CubeData) do
  33.     begin
  34.       // jeden punkt des rechtecks abarbeiten
  35.       glBegin (GL_QUADS);
  36.         // Normale für die fläche definieren
  37.         glNormal3dv (@CubeData[Plane].Normale);
  38.         for Vertex := low (CubeData[Plane].Corners) to
  39.                       high (CubeData[Plane].Corners) do
  40.         begin
  41.           if BaseTexture then
  42.           begin
  43.             // Texturkoordinaten für den aktuellen eckpunkt der
  44.             // basistextur festlegen
  45.             glMultiTexCoord2d(FPlaneBaseTexUnit,
  46.                               CubeData[Plane].Corners[Vertex].Data.TexS,
  47.                               CubeData[Plane].Corners[Vertex].Data.TexT);
  48.           end;
  49.           if StruTexture then
  50.           begin
  51.             // Texturkoordinaten für den aktuellen eckpunkt der
  52.             // detailtextur festlegen
  53.             glMultiTexCoord2d(FPlaneStruTexUnit,
  54.                               CubeData[Plane].Corners[Vertex].Data.TexS,
  55.                               CubeData[Plane].Corners[Vertex].Data.TexT);
  56.           end;
  57.           // die position im koordinatensystem für den aktuellen
  58.           // eckpunkt festlegen
  59.           glVertex3dv(@CubeData[Plane].Corners[Vertex].Data.Vector);
  60.         end;
  61.       glEnd;
  62.     end
  63.  


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]