Toon posts:

[OpenGL] transparant water glBlendFunc

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het renderen van een stukje water oppervlakte
Ik heb een grid van 60x60 punten, daartussen teken ik driehoeken of quads.

Ik wil nu het water wat tranparantie geven via BLEND.

ik gebruik: glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Als ik dat doe krijg ik het wel transparant maar er zitten rare gekleurde driehoekjes tussen.
Het komt alleen als de golven hoog zijn en je dus door de ene golf door naar de andere kan kijken en hierdoor verkeerd geblend wordt. (denk ik)

Het is dus erg afhankelijk van de camera positie en de hoogte van de golven. Het rare is als ik 180 graden draai en het water vanaf de andere kant bekijk het niet gebeurd.

is mijn glBlendFunc wel goed?.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-02 19:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je glBlendFunc is goed, de vraag is echter of je je triangles wel sorteert van achter naar voor en of je z-writes wel gedisabled hebt :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04-2025
.oisyn schreef op dinsdag 27 juni 2006 @ 13:49:
Je glBlendFunc is goed, de vraag is echter of je je triangles wel sorteert van achter naar voor
Dit is het waarschijnlijk, alhoewel dit bij grote hoeveelheden triangles wel een performance hit oplevert (spellen als GTA3+ zijn goede voorbeelden waarbij ze het niet doen).
en of je z-writes wel gedisabled hebt :)
Wat helpt dit, als ik vragen mag?

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
JeRa schreef op dinsdag 27 juni 2006 @ 13:55:

[...]

Wat helpt dit, als ik vragen mag?
Als je Z-Buffer aanstaat (DEPTH_TEST?) dan tekent opengl niets wat niet zichtbaar is. Maar omdat bij blending alles doorzichtig is, gaat de depth test de fout in en laat hij tenonrechte beeldinformatie weg. Daarom je depth test uitschakelen.

[ Voor 20% gewijzigd door The Fox NL op 27-06-2006 14:05 ]


  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04-2025
The Fox NL schreef op dinsdag 27 juni 2006 @ 14:05:
[...]


Als je Z-Buffer aanstaat (DEPTH_TEST?) dan tekent opengl niets wat niet zichtbaar is. Maar omdat bij blending alles doorzichtig is, gaat de depth test de fout in en laat hij tenonrechte beeldinformatie weg. Daarom je depth test uitschakelen.
Dat klopt wel, maar dat heeft geen nut als je de triangles al van achter naar voren sorteert. Het enige wat dat nog oplevert is extra performance (Z-buffer hoeft niet bijgewerkt te worden).

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-02 19:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

JeRa schreef op dinsdag 27 juni 2006 @ 13:55:
[...]

Dit is het waarschijnlijk, alhoewel dit bij grote hoeveelheden triangles wel een performance hit oplevert (spellen als GTA3+ zijn goede voorbeelden waarbij ze het niet doen).
De meeste spellen doen het echter wel, en die performancehit valt best mee. Een perfecte sortering haal je toch niet (de typische painter's algorithm problemen), meestal wordt er ook slechts gesorteerd op groepen van polygonen, niet individuele polygonen an sich.
Wat helpt dit, als ik vragen mag?
Het lost het probleem van de TS ook deels op. Omdat je geen perfecte sortering hebt wil je meestal niet dat dingen achter je transparante polygonen niet meer gerenderd worden. Correct is het natuurlijk niet, door de blendmethode (het werkt alleen correct met additive blending), maar het resultaat is wel beter dan de pixels helemaal niet tekenen. En je krijgt er idd ook wel een hogere throughput door.

[ Voor 6% gewijzigd door .oisyn op 27-06-2006 14:34 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 19-02 19:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

The Fox NL schreef op dinsdag 27 juni 2006 @ 14:05:

Als je Z-Buffer aanstaat (DEPTH_TEST?) dan tekent opengl niets wat niet zichtbaar is. Maar omdat bij blending alles doorzichtig is, gaat de depth test de fout in en laat hij tenonrechte beeldinformatie weg. Daarom je depth test uitschakelen.
Klok en klepel ;). Ik zei dat je je z write moest disablen, niet je z test. Anders worden transparante polygonen achter solide muren bijvoorbeeld nog steeds gerenderd, dat wil je natuurlijk niet.

Oh, en nog iets voor de TS, transparante polygonen render je natuurlijk pas in de laatste pass :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
.oisyn schreef op dinsdag 27 juni 2006 @ 14:35:
[...]

Klok en klepel ;). Ik zei dat je je z write moest disablen, niet je z test. Anders worden transparante polygonen achter solide muren bijvoorbeeld nog steeds gerenderd, dat wil je natuurlijk niet.

Oh, en nog iets voor de TS, transparante polygonen render je natuurlijk pas in de laatste pass :)
Ah, bijna goed :P
Pagina: 1