Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

flux

Treue Seele

  • »flux« ist der Autor dieses Themas
  • Private Nachricht senden

1

04.06.2009, 13:06

OpenGL blending

Hallo zusammen.

Ich habe zur zeit ein problem mit dem Blending in OpenGL.
Das Problem sieht man in dem Bild:

(Link)

Ich möchte, dass es aussieht wie in 2 und zur zeit sieht es so aus wie in 1.

Habt ihr eine Idee, wie ich das hinbekomme?

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

2

04.06.2009, 13:35

Stichwort 'Additives Blenden'?
<< an dieser Stelle ist eine Signatur verstorben >>

3

04.06.2009, 13:52

Hm, du darfst ja im Prinzip die Stelle in der Mitte nur einmal bemalen. Vielleicht musst du deshalb sogar mit dem Stencilbuffer rumtricksen.
Lieber dumm fragen, als dumm bleiben!

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

04.06.2009, 13:58

Oh mist, dachte er wolle es wie in 1 haben und hätte es wie in 2 :D Verlesen!

Wie wär's einfach mit Z-Buffer? Zeichnest zuerst das erste, wobei du in den Z-Buffer schreibst, dann das zweite, mit zur Sicherheit etwas verkleinerten Z-Koordinaten und 'greater' als Z-Test. Man soll Fließkommazahlen ja nie auf Gleichheit prüfen.
<< an dieser Stelle ist eine Signatur verstorben >>

flux

Treue Seele

  • »flux« ist der Autor dieses Themas
  • Private Nachricht senden

5

04.06.2009, 16:10

Erstmal danke für die Antworten.

Ich habe es jetzt mit dem Stencil buffer versucht.
Damit zeichne ich zuerst in den Buffer, indem ich den Wert um 1 erhöhe. Danach sollen nur das gezeichnet werden, wo eine 1 im Buffer steht. Das funktioniert auch. Leider werden dann aber auch die eigentlich unsichtbaren Bereiche mitgezeichnet.

(Link)

Ist ja auch logisch, aber wie bekomme ich das wieder weg?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GL11.glColorMask(false, false, false, false);
GL11.glDisable(GL11.GL_TEXTURE_2D);

GL11.glEnable(GL11.GL_STENCIL_TEST);
GL11.glStencilFunc(GL11.GL_ALWAYS, 1, 1);
GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_INCR);

drawQuad();

GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glColorMask(true, true, true, true);

GL11.glStencilFunc(GL11.GL_EQUAL, 1, 255);
GL11.glStencilOp(GL11.GL_KEEP, GL11.GL_KEEP, GL11.GL_KEEP);

drawQuad();

3dcoder

Frischling

Beiträge: 40

Wohnort: Krefeld

  • Private Nachricht senden

6

05.06.2009, 18:12

Hi Flux!

Versuchs mal mit glAlphaFunc - laut Dokumentation werden Fragmente verworfen wenn der Alpha-Test fehl schlägt - und damit landen die dann auch nicht im Stencil Buffer. Dadurch sollte dann auch nur exakt die Kreisform im Stencil Buffer landen:

Zitat

The alpha test discards fragments depending on the outcome of a comparison
between an incoming fragment's alpha value and a constant reference value.
glAlphaFunc specifies the reference value and the comparison function.
The comparison is performed only if alpha testing is enabled. By
default, it is not enabled.
(See
glEnable and glDisable of GL_ALPHA_TEST.)

func and ref specify the conditions under which
the pixel is drawn.
The incoming alpha value is compared to ref
using the function specified by func.
If the value passes the comparison,
the incoming fragment is drawn
if it also passes subsequent stencil and depth buffer tests.
If the value fails the comparison,
no change is made to the frame buffer at that pixel location.
The
comparison functions are as follows:


von http://www.opengl.org/sdk/docs/man/xhtml/glAlphaFunc.xml

Grüße
Stefan

Werbeanzeige