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

Aktuelle Zeit: Fr Jul 18, 2025 00:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 13 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Aug 31, 2007 13:00 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 09:24
Beiträge: 4
Hallo,

im Tutorial 7

http://wiki.delphigl.com/index.php/Tutorial_Lektion_7

steht:
Zitat:
Wir wechseln danach zur zweiten Textur-Unit und machen ähnliche Einstellungen, aktivieren zusätzlich jedoch Blending für diese Funktion.


Ich habe folgendermaßen versucht das Beispiel mit dem Titel "Der Überläufer" mit Multitexturing nachzumachen, indem ich das Blending aktiviere wenn die 2. Texturunit (Unit 1) aktiv ist:

Code:
  1.  
  2.          glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  3.          glActiveTextureARB(GL_TEXTURE1_ARB);              
  4.          glEnable(GL_TEXTURE_2D);
  5.      glEnable(GL_BLEND);                          //Hier
  6.      glBindTexture(GL_TEXTURE_2D,land.get_Textur(0)->get_texture());
  7.      glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
  8.  
  9.  
  10.  
  11.             glActiveTextureARB(GL_TEXTURE0_ARB);              
  12.             glEnable(GL_TEXTURE_2D);                          
  13.         glBindTexture(GL_TEXTURE_2D,land.get_Textur(1)->get_texture());
  14.         glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  15.            
  16.            
  17.  
  18.             glBegin(GL_QUADS);                                    
  19.            
  20.             glColor4f(1.0,1.0,1.0,1.0);
  21.             glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,1.0);    
  22.             glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,1.0);    
  23.             glVertex3d(10,10,10);
  24.  
  25.             glColor4f(1.0,1.0,1.0,1.0);
  26.             glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,1.0);
  27.             glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,1.0);
  28.             glVertex3d(10,10,20);
  29.  
  30.             glColor4f(1.0,1.0,1.0,0.0);
  31.             glMultiTexCoord2fARB(GL_TEXTURE0_ARB,0.0,0.0);
  32.             glMultiTexCoord2fARB(GL_TEXTURE1_ARB,0.0,0.0);
  33.             glVertex3d(20,10,20);
  34.  
  35.             glColor4f(1.0,1.0,1.0,0.0);
  36.             glMultiTexCoord2fARB(GL_TEXTURE0_ARB,1.0,0.0);
  37.             glMultiTexCoord2fARB(GL_TEXTURE1_ARB,1.0,0.0);
  38.             glVertex3d(20,10,10);
  39.            
  40.             glEnd();
  41.            
  42.         glActiveTextureARB(GL_TEXTURE1_ARB);
  43.        
  44.             glDisable(GL_TEXTURE_2D);                                
  45.             glDisable(GL_BLEND);                                    
  46.             glActiveTextureARB(GL_TEXTURE0_ARB);  
  47.  


Das Problem ist nun, dass anscheinend beide Textur-Units blending verwenden, denn das Gesamtergebnis (was man dann zu sehen bekommt) ist transparent.



Wie kann man nur für die 2. Textur-Unit das Blending aktivieren?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 13:39 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
In Zeile 3-5 aktivierst du doch Blending für Textureinheit 1 (Wobei der Blendmodus fehlt). Daher verstehe ich deine Frage nicht so richtig.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
erhm... Ist es nicht so, dass Blending für eine Primitivie und nicht für eine textur gilt?

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
@Lord Horazont:
Nein, das Blending gilt für die Textur ;)

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 16:23 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 09:24
Beiträge: 4
Ich benutze zwei Texturen:
http://wiki.delphigl.com/index.php/Bild ... ll_tex.jpg
http://wiki.delphigl.com/index.php/Bild ... as_tex.jpg

Und das Ergebnis soll so aussehen:

http://wiki.delphigl.com/index.php/Bild ... aswall.jpg

Es sieht mit meinem code (siehe oben) aber so aus: (Um es besser zu sehen mit einer Berglandschaft als Hintergrund)

http://www.pictureupload.de/pictures/29 ... ispiel.jpg


Das Bild wird insgesamt durchsichtig anstatt beide Bilder ineinanader übergehen zu lassen.


Wie muß ich meinen Code verändern damit das Ergebnis so
http://wiki.delphigl.com/index.php/Bild ... aswall.jpg
aussieht?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 16:41 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Tipp a)
Eine Textur mit Alphakanal benutzen damit Blending überhaupt funktionieren kann.

Tipp b)
Den vollständigen Rendercode geben. Den in deinem Code fehlt das wichtigste.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 16:51 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
i0n0s hat geschrieben:
Tipp a)
Eine Textur mit Alphakanal benutzen damit Blending überhaupt funktionieren kann.

Wird der Alphawert nicht über glColor4f() geliefert?

Ich lese im Tutorial:
Code:
  1. glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);


Und in deinem Code:
Code:
  1. glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);


MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 19:52 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 09:24
Beiträge: 4
Danke für den Hinweis.
Aber wenn ich BlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
verwende wirds noch transparenter

http://www.pictureupload.de/pictures/31 ... ispiel.jpg

und deswegen hatte ich schon das andere genommen.
(Weils etwas weniger transparent ist, dachte ich ich währe auf dem richtigeren Weg)


Weiß jemand wie das im Tutorial 7 erwähnte Einschalten des Blendings nur für Textureinheit 2 funktioniert?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Aug 31, 2007 20:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Edit: Jetzt wo ich mal genauer drüberschaue, fällt mir erst der Zusammenhang zu dem was ich vorhin schon gesagt habe auf: Du kannst 1 Quad nur 1 Alphacolor-Wert zuweisen, brauchst aber 2 unterschiedliche für jede Textur! Also führt der einzige Weg dieses Blendeffekts wirklich über 2 Quads oder über 2 Texturen mit vorher berechneten und geladenem Alphakanal.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 01, 2007 09:57 
Offline
DGL Member

Registriert: Fr Aug 31, 2007 09:24
Beiträge: 4
Genau, deswegen habe ich ja auch versucht die gesamten Informationen nur aus dem ersten alpha Wert (Source) zu gewinnen und habe

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

verwendet.
Dies müste doch genau das tun was ich möchte, für jeden Eckpunkt den Alphawert für textureinheit 1 genau invertiert zu textureinheit 0 angeben.
(Oder habe ich da was falsch verstanden)?

Es würde ja schon reichen die Textur in Textureinheit 0 komplett ohne Transparenz zu zeichnen.
Und im Tutorial klingt es so, als ob man das könnte (Das Blending nur für eine bestimmte Textureinheit einzuschalten, denn)


Es steht folgender Satz genau so im Tutorial:
Zitat:
Wir wechseln danach zur zweiten Textur-Unit und machen ähnliche Einstellungen, aktivieren zusätzlich jedoch Blending für diese Funktion.



Es steht nur leider nicht in dem Tutorial, wie man die Blending funktion gezielt für Textureinheit 1 aktiviert.
Für mich klingt der Satz aber so als ob es gehen müßte. Nur wie?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 01, 2007 11:15 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 02, 2002 15:41
Beiträge: 867
Wohnort: nahe Stuttgart
Andreas XXL hat geschrieben:
Genau, deswegen habe ich ja auch versucht die gesamten Informationen nur aus dem ersten alpha Wert (Source) zu gewinnen und habe
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
verwendet.
Dies müste doch genau das tun was ich möchte, für jeden Eckpunkt den Alphawert für textureinheit 1 genau invertiert zu textureinheit 0 angeben.
(Oder habe ich da was falsch verstanden)?

glBlendFunc: Source = Quelle ist das, was du hinzufügst; Destination = Ziel ist der Framebuffer, also das, was schon gezeichnet ist.
Mit der Funktion glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); sagst du also, übernehme soviel von der Quelle/Textur, wie der Alphawert der Quelle/Textur ist, übernehme soviel vom FrameBuffer, wieviel 1-Alphawert der Quelle ist (quasi den Rest).
Etwas mathematischer:
Neuer FrameBuffer = Textur * Textur.Alpha + FrameBuffer * (1 - Textur.Alpha)

Von Blending nur für eine TextureUnit hab ich leider keine Ahnung.

MfG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 01, 2007 11:22 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Die Kombinationsmodi für die einzelnen TMUs lassen sich über glTexEnv setzen. Man muss dort dann für den Modus GL_COMBINE übergeben :
Code:
  1. glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);


Danach kann man über leider etwas komplizierte Parameter an glTexEnv angeben wie sich die Texturen der TMUs miteinander verhalten sollen, kleines Beispiel :
Code:
  1. glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_ADD);
  2. glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
  3. glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);


Das ist leider relativ unflexibel, und wenn möglich sollte man sowas mit einem Shader machen.

Hier findet sich eine Tabelle über die von mir angesprochenen Parameter und wie sie rechnen. Etwas weiter runterscrollen.

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Sep 02, 2007 22:05 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eine verkürzte Form des Artikels findet man auch im Wiki: glTexEnv

Was mich wundert ist, dass der verlinkte Artikel viel mehr Tabellen enthält. Kann es sein, dass unser Wikiartikel unvollständig ist?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 4 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.010s | 17 Queries | GZIP : On ]