Blendeffekte

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Blendeffekte

Beitrag von benpicco »

Wie kann man sowas machen (und zwar so, das es noch flüssig läuft)
Bild
Das Hauptproblem dabei ist wohl, das "Blenden" auf den gesamten Bildschirm anzuwenden, d.h. man müsste jeden Pixel einzeln auslesen und manipulieren. Die Einfachste Möglichkeit wäre wohl mit grabsprite den Bildschirm in ein Sprite zu packen und das mit drawingbufferpitch aus dem speicher zu lesen, manipullieren und wieder dort reinzuschreiben und schließlich anzuzeigen.
Aber das ist warscheinlich nicht sehr schnell...
Ich hab mir gedacht das es villeicht gehen könnte, wen man vor Flipbuffers den nichtangezeigten drawingbuffer auslist und direkt manipulliert. Geht sowas? Wäre es schnell genug für ein Spiel?
Andererseits hat bei den beiden Lösungen immer die CPU alles auszurechnen, aber könnte sich bei sowas nicht mal die teure pixelschleuder nützlich machen :wink:? Danke schonmal für alle Tipps, die ihr mir doch hoffentlich gebt ^^
edit:nur ein parr Rechtschreibfehler entfernt...
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

hoppla, doppelpost :mrgreen:

ich denke nicht, dass man sowas in einem game verwänden kann.
hab damals auch sowas ähnliches gefragt (blur-effekt)
dazu wurde gemeint, dass man dass unmöglich so schnell berechnen kann, dass es in nem spiel zu gebrauchen ist :allright:
-.-"
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

naja, nichtsdestotrotz gibt es Spiele, die damit trotzdem flüssig laufen, ich wüsste zu gerne, wie die das machen... :roll:
(DirectX? OpenGL? Funktionen?)
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8812
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Bei DirectX musst man sich nur mal mit Shadern auseinandersetzen und
die zahlreichen Hardwareeffekte der Grafikkarte ausnutzen.

Mehr weiß ich dann aber auch nicht. :wink:
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Stichwort: Lensflare ;-) Linsenreflex. Such einfach mal danach, dann findest du genug Seiten über das Thema.

Oder meinst du etwa nur die Strahlen?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Kaeru Gaman hat geschrieben:und wozu führt das?
Das führt zu vielen Offtopic-Beiträgen.
benpicco hat geschrieben:Wie kann man sowas machen (und zwar so, das es noch flüssig läuft)
Wie DarkDragon schon sagte, die großen Kreise (was aussieht
wie ein Linseneffekt bei einer Kamera) nennt man Lensflare.
Dazu gibt es im Netz Infos. Kurz gesagt mußt Du nur ausrechnen
wo diese Kreise mit welcher Blendstufe und in welcher Farbe auftauchen.

Das blenden und die "Sterne" kannst kann man bestimmt auch
mit PureBasics Sprite3D machen. Nimm mal ein Sprite das in der
Mitte einen weißen Kreis hat und drumherum diese Strahlen.
Im Alphakanal fadest Du die Strahlen aus, so daß sie langsam
durchsichtig werden. Das nimmst Du dann als Textur für ein
Sprite3D.
Das Sprite3D kannst Du drehen, also somit den ganzen "Stern".
Dazu noch mit den BlendingModes rumspielen, siehe PB-Referenz
unter Sprite3D.

2 Solcher Strahl-Sterne hintereinander dargestellt und in
unterschiedliche Richtungen rotiert sollten einen netten
Lichteffekt geben.

Ich bin mir jetzt aber nicht sicher ob PB auch Sprites mit
AlphaKanal laden und verarbeiten kann. Der letzte Parameter
von DisplaySprite3D gilt ja nur für das ganze Sprite3D, Du
brauchst aber auch die Möglichkeit jeden einzelnen Pixel im
Bild auszublenden.
Wenn es mit PB nicht geht, dann mußt Du direkt mit DX
eine Textur mit AlphaChannel erstellen und das dann mit
4 Eckpunkten wie ein Sprite3D auf den Screen zaubern.

Habe leider im Moment keine Zeit, aber vielleicht reicht Dir
das schon als kleiner Denkanstoss.


EDIT:
Mir fällt gerade noch ein das Du evtl. keinen AlphaChannel
brauchst. Es gibt einen BlendingMode wo Weiß als 100%
genommen wird und Schwarz als 0%. Das ganze gibt es
glaubich auch genau anders herum.
D.h. Du zeichnest in der Mitte des Bildes einen weißen Kreis
und die Strahlen außenrum werden langsam über grau nach
schwarz ausgeblendet. Mit dem richtigen BlendingMode siehst
Du dann entsprechend ausblendende Strahlen.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

das auf benpicco's bild sind ganz simple texturen (sprites3d). siehe auch z.b. http://www.opengl.org/resources/feature ... LensFlare/

p.s: hab nicht alles gelesen, sorry falls das jemand schon gesagt hat.

edit: arghs. sorry danilo, aber deine posts sind immer ziemlich lang, da heb ich mir das lesen meistens für später auf. :D

c ya,
nco2k
~|__/
..o.o.. <--- This is Einkaufswagen. Copy Einkaufswagen into your signature to help him on his way to world domination.
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Warum scheuen sich hier so viele Leute mit den 3D-Sprites zu spielen?
Gerade Lensflare, Blend und Partikel Effekte hat man flott dahingeschrieben.

Additives Blending:

Code: Alles auswählen

Sprite3dBlendingmode(5,7)[
funktioniert zumindest bei ATI-Karten
I´a dllfreak2001
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

DarkDragon hat geschrieben:Oder meinst du etwa nur die Strahlen?
nur is gut... wie geht das?
(performant, einfach, praktikabel)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Danke, der Blendingmode ist wirklich die Lösung für das Lenseflare problem! :allright: (Das er so wenig genutzt wird, liegt villeicht an der etwas dürftigen Dokumentation in der Hilfe... )
Die Strahle sind tatsächlich ein ziemliches Problem, ich hab´s schon mit nem 1pxl hohem sprite3d mit Farbverlauf, den ich über transformsprite3d gedreht habe probiert, aber dabei entstehen nur seltsame Muster o_O (das Sprite wird bei TransformSprite3D scheinbar übel zugerichtet...)
Und wie kann ich jetzt noch Farbe ins Spiel bringen? Mit RGBFilter sieht es ja ganz gut aus, aber dabei steht immer der eckige Filterkasten über...
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Antworten