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

Aktuelle Zeit: Fr Jul 18, 2025 11:17

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Mär 21, 2008 01:24 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
Hossa,

ich versuche gerade ein kleines Programm zu schreiben das zum einen eine Multitextur nutzt und diese mittels Aplhablending dann Transparent rendert, und zusätzlich ganz "normale" Alphatexturen rendert.

Nun das multitexturing geht mittlerweile und der Folgende Code funktioniert wunderbar
Code:
  1.  
  2.  
  3.     glActiveTexture(GL_TEXTURE1);
  4.     glEnable(GL_TEXTURE_2D);
  5.     glbindtexture(gl_texture_2d, FTransparentMask);
  6.     glTexEnvi(GL_TEXTURE_ENV, gl_texture_env_mode, GL_MODULATE);
  7.  
  8.     glActiveTexture(GL_TEXTURE0);
  9.     glEnable(GL_TEXTURE_2D);
  10.     glbindtexture(gl_texture_2d, Fimage);
  11.     glTexEnvi(GL_TEXTURE_ENV, gl_texture_env_mode, GL_Replace);
  12.  
  13.     // Rendern der Landschaft
  14.     glEnable(GL_ALPHA_TEST);
  15.     glalphafunc(gl_less, 1);
  16.     glbegin(gl_quads);
  17.     glMultiTexCoord2f(GL_TEXTURE0, 0, 0);
  18.     glMultiTexCoord2f(GL_TEXTURE1, 0, 0);
  19.     glvertex3f(0, 0, 0);
  20.  
  21.     glMultiTexCoord2f(GL_TEXTURE0, 0, Fsheight);
  22.     glMultiTexCoord2f(GL_TEXTURE1, 0, Fsheight);
  23.     glvertex3f(0, Fheight, 0);
  24.  
  25.     glMultiTexCoord2f(GL_TEXTURE0, FSwidth, Fsheight);
  26.     glMultiTexCoord2f(GL_TEXTURE1, FSwidth, Fsheight);
  27.     glvertex3f(Fwidth, fheight, 0);
  28.  
  29.     glMultiTexCoord2f(GL_TEXTURE0, FSwidth, 0);
  30.     glMultiTexCoord2f(GL_TEXTURE1, FSwidth, 0);
  31.     glvertex3f(Fwidth, 0, 0);
  32.     glend;
  33.     gldisable(GL_alpha_test);
  34.  


Das Problem ist nun das ich danach noch eine weitere Alphatextur "Normal" rendern will , dies mache ich mittels
Code:
  1.  
  2.   glenable(gl_texture_2d);
  3.  
  4.   glBindTexture(gl_texture_2d, FImage);
  5.  
  6.   glEnable(GL_ALPHA_TEST);
  7.   glalphafunc(gl_less, 1);
  8.  
  9.   glbegin(gl_quads);
  10.  
  11.   glTexCoord2f(0, 0);
  12.   glvertex3f(0, 0, 0);
  13.  
  14.   glTexCoord2f(0, FScaleHeight);
  15.   glvertex3f(0, FImageHeight, 0);
  16.  
  17.   glTexCoord2f(FScaleWidth, FScaleHeight);
  18.   glvertex3f(FImageWidth, FImageHeight, 0);
  19.  
  20.   glTexCoord2f(FScaleWidth, 0);
  21.   glvertex3f(FImageWidth, 0, 0);
  22.  
  23.   glend;
  24.  
  25.   gldisable(GL_alpha_test);
  26.  


Auch dieser Code ist Korreckt, denn wenn ich die MultitexturRendering Procedure auskommentiere wird mein Normales Bild 1a Gerendert

Nur Leider klappt beides gemeinsamm nicht.

Ich gehe mal davon aus das OpenGL dank der State machine nach dem Rendern der Multitextur noch irgendwie falsch steht.

Nu habe ich gesucht wie irre, aber leider nirgens gefunden wie man

Code:
  1.     glActiveTexture(GL_TEXTURE1);


wieder Rückgängig machen kann.

oder mus man da etwas ganz anderes machen ?

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 03:29 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Code:
  1. glActiveTexture(GL_TEXTURE0);

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 09:56 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
nein das ist es leider nicht,



aber ich glaube das der irgendwie beim Rendern noch die Anderen Texturen aus
Code:
  1.  
  2. glActiveTexture(GL_TEXTURE0);
  3.  


nutzt. Um das Ab zu schalten müste ich wohl den Parameter

Code:
  1.  
  2.     glTexEnvi(GL_TEXTURE_ENV, gl_texture_env_mode, GL_MODULATE);
  3.  

umbauen, der da 2 mal gesetzt wurde. Die Frage ist nur worauf ..

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 10:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Mit glActiveTexture sagst du doch nur, welche Stufe jetzt aktiv ist. Wenn du eine Stufe wieder weghaben willst, dann mach glDisable(GL_TEXTURE_2D).
Also halt genau umgedreht wie beim aktivieren, da machst du es doch auch so


Code:
  1. glActiveTexture(GL_TEXTURE1);
  2. glEnable(GL_TEXTURE_2D);
  3.  

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 12:33 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
aha, nu gehts , aber noch nicht Optimal.

nach dem Rendern der Multitextur mache ich nun

Code:
  1.  
  2.  
  3.     glActiveTexture(GL_TEXTURE0);
  4.     glDisable(GL_TEXTURE_2D);
  5.     glActiveTexture(GL_TEXTURE1);
  6.     glDisable(GL_TEXTURE_2D);
  7.  


Das Problem ist aber das die Andere Alphatextur ich nicht mittels

Code:
  1.  
  2.     glEnable(GL_TEXTURE_2D);
  3.  



sondern nur mittels

Code:
  1.  
  2.     glActiveTexture(GL_TEXTURE0);
  3.     glEnable(GL_TEXTURE_2D);
  4.  


Nu geht das so und ich könnte mich damit zufriedengeben, die Frage ist jedoch warum das ohne dieses

Code:
  1.  
  2.     glActiveTexture(GL_TEXTURE0);
  3.  


nicht mehr geht ?

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 14:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wenn du eine Textureinheit mit glActiveTextur aktivierst, beziehen sich alle Textureinstellungen und Operationen solange auf diese TMU bis du auf eine andere wechselst. Das liegt in der Natur der Sache, den OpenGL ist eine sog. Statemachine.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 19:14 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
und wie wechsle ich dann wieder auf die die normalerweise an ist ?

bzw wie heist die ?

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 19:36 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
TMU0 ist die erste TMU und daher auch die, die benutzt wird wenn man nicht bzw. nie wechselt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 20:28 
Offline
DGL Member

Registriert: Mo Jun 12, 2006 14:47
Beiträge: 75
Programmiersprache: Object FPC
langsam verstehe ich ,


vielen Dank

_________________
Try my 3D-Game (new Version 2) Balanced2 v2.02
or See my other Stuff at http://www.Corpsman.de


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 14 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.009s | 14 Queries | GZIP : On ]