opengl und gegenstand glühen lassen



  • Wenn du meinst das der Gegenstand über seine Kanten hinaus glüht geht das sogar recht easy.

    Ich nehme mal an du texturierst alles was du renderst. Dann pack in jede Textur
    noch einen Alphakanal. In der Textur malst du alles was glühen soll mit Alpha=255, der Rest muß Alpha=0 sein.

    Dann gehts los:
    Verkleinere den Viewport (mit den Werten mußt du etwas experimentieren)
    Render deine Objekte mit einem Texturcombiner der Textur.RGB*Textur.A ausgibt.
    Dadurch hast du jetzt alles was glüht im Viewport.
    Kopier das jetzt in eine Textur (glCopyTexSubImage2D).
    Stell deinen Viewport wieder auf die normale Größe
    Lösch den Screen (glClear)
    Render alles wie normal. (normaler TexCombiner)
    Render einen Quad der den Viewport ausfüllt mit der Blur-Textur.
    Voila ein netter Blur.

    Falls es nicht blurry genug ist kannst du den Viewport verkleinern (-> kleinere Textur)
    Und/Oder eine Mipmap der Blurtextur benutzen (MipMaps kannste in OpenGL
    automatisch erzeugen (kein gluMipMap bitte!))

    Mit PBuffern würde das natürlich wesentlich besser gehen 😉



  • Ach ja. Der Effekt wird in Halo in ähnlicher weise angewandt um
    die sich in den Bäumen brechende Lichtstrahlen zu rendern.

    Und hier gibts ne nette Demo die den Effekt auch benutzt:
    http://realtimecg.gamedev-pt.net/downloads.html



  • hey danke!

    das klingt ja vielversprechend, sobald es meine zeit zulässt .. werd ich das mal ausprobieren ..

    falls es irgendwo noch nen fertigen opengl samplecode gibt, nehm ich den natürlich auch gerne 🤡

    nochmals thx für die fixe und ausführliche antwort 👍



  • Auf Nehe gibts ne (IMHO unoptimierte :p ) Fassung davon

    Sonst Google einfach mal.



  • Warum muss man eigentlich erst auf eine Textur rendern, könnte man nicht gleich auf die primary?

    Bye, TGGC



  • Wie willste dann den Blur reinkriegen?
    PixelShader/ FragmentPrograms wären noch nicht abwärts kompatibel
    genug.



  • Gegenfrage: Wie willst du denn einen Blur hinkriegen?

    Bye, TGGC



  • Weil ich die Scene in eine kleine Textur rendere und durch das Skalieren
    einen Blur kriege. Falls du mir nicht glaubst, spiel mal die Tron-Demo.
    Die blurren echt alles 😃



  • Oder er kann ein weißes Flare Sprite nehmen dem die entsprechende Vertexcolor verpassen und vor dem Rendern des Flares additives Blending aktivieren.



  • Kane schrieb:

    Weil ich die Scene in eine kleine Textur rendere und durch das Skalieren
    einen Blur kriege. Falls du mir nicht glaubst, spiel mal die Tron-Demo.
    Die blurren echt alles 😃

    So kriegst du aber kein Blur, höchstens ein lineares Filtering.

    Bye, TGGC


  • Mod

    TGGC schrieb:

    Kane schrieb:

    Weil ich die Scene in eine kleine Textur rendere und durch das Skalieren
    einen Blur kriege. Falls du mir nicht glaubst, spiel mal die Tron-Demo.
    Die blurren echt alles 😃

    So kriegst du aber kein Blur, höchstens ein lineares Filtering.

    Bye, TGGC

    die textur wird über die richtige scene nochmal additiv gezeichnet, somit bekommt man durch das lineare filtering verwaschene kanten, was als blur definiert wird, s.a. ... To render obscure by making the form or outline of confused and uncertain, as by soiling;...

    auf besserer hardware kann man den pixelshader nutzen um den blureffeckt zu verbessern, aber die technik ist gleich, alle dinge die geblured werden sollen bekommen eine helle farbe beim rendern und der rest bekommst schwarz, das natürlich in eine kleine textur z.b.64*64 und nach dem richtigen rendern additiv über den screen. (deswegen gibt's glow/blur bei splinter cell sogar auf der ps2)

    rapso->greets();



  • @rapso: Genau! Hatte nur das Blending vergessen zu erwähnen 🙄



  • Ok, wenn ihr Blur so definiert... Bei mir gibts auch Blur, da die Konturen durch Änderung der Transformationsmatrix und Alphablending verwaschen sind.

    Bye, TGGC


Anmelden zum Antworten