Seite 1 von 3

Blendeffekte

Verfasst: 10.11.2005 18:45
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...

Verfasst: 10.11.2005 18:50
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:

Verfasst: 10.11.2005 18:54
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?)

Verfasst: 10.11.2005 18:58
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:

Verfasst: 10.11.2005 18:59
von DarkDragon
Stichwort: Lensflare ;-) Linsenreflex. Such einfach mal danach, dann findest du genug Seiten über das Thema.

Oder meinst du etwa nur die Strahlen?

Verfasst: 10.11.2005 21:41
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.

Verfasst: 10.11.2005 23:59
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

Verfasst: 11.11.2005 11:49
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

Verfasst: 11.11.2005 11:52
von Kaeru Gaman
DarkDragon hat geschrieben:Oder meinst du etwa nur die Strahlen?
nur is gut... wie geht das?
(performant, einfach, praktikabel)

Verfasst: 12.11.2005 13:02
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...