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

1

07.06.2012, 16:14

OpenGL Blending

Hallo Spieleprogrammierer :),

ich wollte mir einen Lichteffekt einbauen. (Ohne Shader, ohne komplexe Berechnungen... ganz einfach einen kreisförmigen Schatten ohne "Kollision" mit Objekten). Darum habe ich eine schwarze transparente Textur gezeichnet (um die Dunkelheit zu simulieren). So...jetzt wollte ich, dass eine Stelle ganz "normal" erscheint (in einer Kreisform), bzw. bisschen transparent.

Deshalb war mein erster Ansatz:

C-/C++-Quelltext

1
2
3
4
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    app.draw(darkness);
    app.draw(light);


Ich weiß, dass das falsch ist, deshalb brauche ich eure Hilfe.

Mit freundlichen Grüßen
Delop

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

07.06.2012, 17:08

Was klappt denn nicht?
@D13_Dreinig

3

07.06.2012, 17:12

Also entweder ist der Kreis ganz weiß (255, 255, 255, 255) oder ganz schwarz(255, 255, 255, 0). Ich könnte den alpha Wert ändern, aber ich möchte nicht das es durch die Farbe beeinträchtigt wird. Also ich weiß nicht, ob glBlendFunc stimmt oder ob die Farbwerte stimmen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

07.06.2012, 17:34

Was für Texturen verwendest du denn, haben diese sinnvolle Alphawerte? Wie renderst du die Geometrie? Seltsam erscheint, dass du beide Stages blendest?!
@D13_Dreinig

5

07.06.2012, 17:37

Also ich weiß nicht wie die Texturen bei SFML aufgebaut sind, aber die haben glaube ich den Alphawert 0. Sollte ich nur eins blenden oder wie?

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

6

07.06.2012, 17:40

du benutzt doch in glBlendFunc die Alphawerte der Texturen. Sind diese auf 0 gesetzt ist das ganze recht sinnfrei.
Du kannst der blendFunc auch feste transparenzen übergeben, zB 0.7 Hintergrund und 0.3 Vordergrund

7

07.06.2012, 17:43


du benutzt doch in glBlendFunc die Alphawerte der Texturen. Sind diese auf 0 gesetzt ist das ganze recht sinnfrei.
Die Alphawerte von der "Dunkelheit" sind nicht 0 und vom Licht auch nicht 0. Oder meinst du den Player, die Map, ...?
Du kannst der blendFunc auch feste transparenzen übergeben, zB 0.7 Hintergrund und 0.3 Vordergrund
Wie mache ich das?

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

8

07.06.2012, 18:02

Wie mache ich das?
die Funktion sieht ja so aus

C-/C++-Quelltext

1
glBlendFunc ( src_factor , dst_factor )


Wenn du jetzt also src_factor 0.3f angibst und als dst_factor 0.7f, dann wird alles was du jetzt zeichnest mit dem Hintergrund (also was bereits gezeichnet wurde) überblendet (70% Vordergrund, 30% Hintergrund)

9

07.06.2012, 18:08

Wenn ich das mache, dann werden alle Texturen schwarz. (R: 255, G: 255, B: 255, A: 150).

Sc4v

Alter Hase

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

10

07.06.2012, 18:14

Also du machst folgendes wenn ich das richtig verstehe:

- Renderst die Welt
- Renderst ne Dunkelheit über die ganze Szene
- Renderst einen "Lichtkreis" drüber?

Wenn du das so machst, dann blendest du wie David_pb schon gesagt hast beide Stages übereinander... also du blendest die dunkelheit auf die szene und darüber nochmal das licht mit den selben Werten

Werbeanzeige