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

Aktuelle Zeit: Sa Jul 12, 2025 19:24

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



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Probleme beim Blending...
BeitragVerfasst: Fr Apr 04, 2008 17:56 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Apr 04, 2008 17:24
Beiträge: 30
Hi!

Als erstes: ich finde die Tutorials echt genial und finde sie gut geschrieben!
Im Moment habe ich mich bis Tut 7 gearbeitet ("Blending").
Vielleicht habe ich etwas falsch verstanden, aber wenn ich die beiden Quadrate mit Texturen mit dem Blending benutze, ist die eine Textur immer vor der anderen zu sehen, obwohl ich erst den Befehl glColor4f(1,1,1,0.5); verwendet habe. Man sieht, dass die Textur transparent wird (Sie sieht auf dem schwarzen Hintergrund dunkler aus), kann man die zweite Textur nicht erkennen.

Das ist mein Code:
Code:
  1.  
  2. glEnable(GL_BLEND);
  3.  
  4.     GetTexture('./dgl.gif');
  5.  
  6.     glBegin(gl_Quads);
  7.       glColor4f(1,1,1,0.5);
  8.       glTexCoord2f(0,0);  glVertex3f(-1,-1,0);
  9.       glTexCoord2f(1,0);  glVertex3f(1,-1,0);
  10.       glTexCoord2f(1,1);  glvertex3f(1,1,0);
  11.       glTexCoord2f(0,1);  glvertex3f(-1,1,0);
  12.     glEnd;
  13.  
  14.     glBlendFunc(GL_ONE,GL_SRC_COLOR);
  15.  
  16.     GetTexture('./rock.jpg');
  17.  
  18.     glBegin(gl_Quads);
  19.       glColor4f(1,1,1,0.5);
  20.       glTexCoord2f(0,0);  glVertex3f(-1,-1,-0.1);
  21.       glTexCoord2f(1,0);  glVertex3f(1,-1,-0.1);
  22.       glTexCoord2f(1,1);  glvertex3f(1,1,-0.1);
  23.       glTexCoord2f(0,1);  glvertex3f(-1,1,-0.1);
  24.     glEnd;
  25.  


Die Funktion GetTexture ist von mir und lädt eine Textur aus einer Datei, dass sie funktioniert habe ich bereits getestet.

Danke für Antworten!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2008 18:06 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Deine Blendfunktion ist auch seltsam. Ich weiß nicht mehr genau wie die konstanten heißen, aber folgendes ist das prinzip der wichtigsten Blendmodi:
Standard Alphablend
Alpha , 1-Alpha

Premultiplied Alphablend (Für Vorteile siehe http://home.comcast.net/~tom_forsyth/bl ... lpha%5D%5D)
kann im spezialfall Alpha=1 für additiv genommen werden. Ermöglicht fließenden Übergang zwischen standard Alphablend und additiven Blending, Schützt for bleeding des colorkeys.
1, 1-Alpha

Additives Blending
1, 1

außerdem musst du bei vielen blendmodi darauf achten von hinten nach vorne zu rendern, und bei denen du nicht aufpassen musst, musst du zumindest entweder z-test oder z-write deaktivieren wenn du nicht sortierst.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2008 19:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
The-Winner ([x] von mir) hat geschrieben:
Deine Blendfunktion ist auch seltsam. Ich weiß nicht mehr genau wie die konstanten heißen, aber folgendes ist das prinzip der wichtigsten Blendmodi:
Standard Alphablend [1]
Alpha , 1-Alpha

Premultiplied Alphablend (Für Vorteile siehe http://home.comcast.net/~tom_forsyth/bl ... lpha%5D%5D)
kann im spezialfall Alpha=1 für additiv genommen werden. Ermöglicht fließenden Übergang zwischen standard Alphablend und additiven Blending, Schützt for bleeding des colorkeys.
1, 1-Alpha [2]

Additives Blending
1, 1 [3]

außerdem musst du bei vielen blendmodi darauf achten von hinten nach vorne zu rendern, und bei denen du nicht aufpassen musst, musst du zumindest entweder z-test oder z-write deaktivieren wenn du nicht sortierst.


[1]:
GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA
[2]:
GL_ONE, GL_ONE_MINUS_SRC_ALPHA
[3]:
GL_ONE, GL_ONE

Zum Tiefentest:
Ich vermute das Problem dort ebenfalls, tausch mal die Reihenfolge der Quads aus.
Zu den beiden Methoden, die The-Winner nannte (z-test deaktivieren, z-write deaktivieren):
Erstere, z-test deaktivieren, sorgt dafür, dass die Fragmente (Pixel) einer Primitivie nicht auf ihre Sichtbarkeit hinsichtlich des Tiefenpuffers geprüft werden. Der Tiefentest kann mittels glDisable(GL_DEPTH_TEST) deaktiviert werden.
Letztere, z-write deaktivieren, verhindert, dass die Fragmente (Pixel) einer Primitivie nicht ihren Tiefenwert in den Tiefenpuffer schreiben und somit für spätere Objekte "unsichtbar" sind. Um das Depth-Write zu deaktivieren musst du glDepthMask verwenden.

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 Apr 04, 2008 20:53 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Apr 04, 2008 17:24
Beiträge: 30
ok, Mittlerweile funktioniert es, allerdings muss die eine Textur ein wenig weiter vorne sein, es funktioniert nicht, wenn beide auf der selben Position sind. Sonst sieht man immer nur die eine der beiden Texturen; ich habe genau den Quellcode aus der DGL Wiki genommen der unter "Der Überläufer" steht (ich habe nur die Funktionen zum Binden der Texturen geändert.). :?:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2008 21:01 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Apr 04, 2008 17:24
Beiträge: 30
AH! Wenn man den Tiefentest ausschaltet funktioniert's.

Danke für die Tipps! :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 04, 2008 22:03 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Ich würde eher das tiefenschreiben als den tiefentest ausmachen

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Apr 05, 2008 09:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Genau. Bei dem ersten Quad das glDepthMask auf False setzen und danach wieder auf True. Dann kannst du beide auf die gleiche position schreiben.

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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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 | 16 Queries | GZIP : On ]