Blendeffekte

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Kaeru Gaman hat geschrieben:
DarkDragon hat geschrieben:Oder meinst du etwa nur die Strahlen?
nur is gut... wie geht das?
(performant, einfach, praktikabel)
AlphaMaske + Textur. Aber natürlich nicht nur mit der internen SpriteEngine von PureBasic.
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
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Willst du die Strahlen etwa in Echtzeit berechnen lassen?
...

Wenn du nicht willst das das Sprite häßlich verzerrt wird benutze lieber
zoomsprite3d. Wenn das zu Langweilig aussieht machst du z.B. eine
Animation und schaltest die einzelnen Sprites dann durch wenn sich das Sprite bewegt. Oder du überlagerst zwei(oder mehr) verschiedene Sprites und lässt sie bei bewegung zueinander umgekehrt drehen.

Wie wärs denn damit?

Code: Alles auswählen

InitSprite()
InitSprite3D()
InitKeyboard()
file.s = OpenFileRequester("Bitmap laden...","","Bitmap|*.bmp",0)
If file <> ""
    OpenScreen(1024,768,32,"Test")
    LoadSprite(0,file,#PB_Sprite_Texture):CreateSprite3D(0,0)    
    Repeat
        ExamineKeyboard()
        
        rot.f + 0.01
        
        Start3D()
            Sprite3DBlendingMode(5,7)
            For x = -2 To 4
                RotateSprite3D(0,rot*x,0)
                DisplaySprite3D(0,100,100,50)
            Next
        Stop3D()
        
        FlipBuffers(1):ClearScreen(0,0,0)
    Until KeyboardPushed(#PB_Key_Escape)
    CloseScreen()
EndIf
End
I´a dllfreak2001
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Das sieht gut aus, blos quetscht zoomSprite3d das Sprite immer in eine Quadratische Form... Da werd ich wohl nicht darumkommen das Sprite in 2x2 Spritchen zu zerhacken und die mit viel Rechnerei anzeigen zu lassen. Aber wird der Blendingmode dan nicht die vielen sprites nicht einzeln verblenden und das ganze etwas seltsam aussehen lassen? (naja, ich probier´s erstmal aus ^^)
Edit: Ok, das funktioniert auch nicht wirklich, es ist viel zu langsam, da bei einem 420px langem Strahl 210*360 3d Sprites angezeigt werden...
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
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

@benpicco

Wenn es dir was hilft kann ich dir mal in OpenGL ein kleines beispiel schreiben.
Habs zwar selber noch nich gemacht aber sollte nicht zu schwer sein denke ich mal.

Gruß,
Nico
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Meine Verwirrung ist groß.
Was willst du denn machen?
willst du jetzt jeden Strahl Echtzeit berechnen?
I´a dllfreak2001
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Naja, anfangs wollte ich ja mit Gimp hergestellt Strahlen benutzen und zufällig anzeigen Lasen (naja, nicht ganz zufällig, aber egal). Das Problem: Drehe ich das Sprite3d, wird es in quadratische Dimensionen gepresst, erstelle ich es vorheer quadratisch überlagert sich ständig das schwarz und scheint aufgrund des Bklendingmodes durch. (Gibt es irgendwo eine Liste, was welche Blendingmodekombinationen bewirken?) und resize ich den Strahl mit TransformSprite3D, wird dieser böse zugerichtet...
Wenn es in OpenGL dafür eine fertige Funktionm gibt, wird mir das wohl nix nützen, da ich da dann alles mit openGL machen müsste...
Müssete man es jedoch mit OpenGL auch anders lösen, würd ich´s mir schon gerne mal anschaun :wink:
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
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

Du weißt das man bei Sprite3Ds sowieso lieber quadratische Grafiken ^2-Dimensionierung nutzt. Da solltest du auch mal etwas nutzlose Grafikfläche in Kauf nehmen. Schnelle Effekte dieser Art wurden noch nie in Echtzeit berechnet(zumindest nicht in der Quali und in Spielen auch nicht). Wenn deine Sprites aber derart groß werden, dann kann dir auch kein Sprite3d helfen. Aktuelle Spiele nutzen dafür Shader.
I´a dllfreak2001
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Naja, das Problem ist dann aber, das die überschüssige (schwarze) Transparentfarbe bei Überlagerung und Blendungode sichtbar wird und dan eben ein riesiger Schwarzer Kasten zu sehen ist. (oder gibt es einen Blendingmode, der das verhindert?)
Shader wäre ja mal was, aber geht sowas mit DX7? PixelShader 1.0 wurde doch erstmals in DirectX 8 eingeführt, die bekomme ich doch nicht in den PBDirectX 7 Screen rein...
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
Ypser
XMas-Contest-Gewinner '03
Beiträge: 128
Registriert: 29.08.2004 14:35
Computerausstattung: Win7
Wohnort: Ingelheim
Kontaktdaten:

Beitrag von Ypser »

benpicco hat geschrieben:Naja, das Problem ist dann aber, das die überschüssige (schwarze) Transparentfarbe bei Überlagerung und Blendungode sichtbar wird und dan eben ein riesiger Schwarzer Kasten zu sehen ist....
Und das sagte dir WER genau?

Wieso siehst du bei den Strahlen ein Problem und bei den LenseFlares nicht?
Ist doch dasselbe in hellgrün! :?

Probier doch einfach mal mit dem BlendingMode (5, 7) rum (bei
MaskColor (0, 0, 0) und du wirst mit den richtigen Grafiken die
gewünschten Ergebnisse erzielen.
Ich sehe da jedenfalls grad keine Probleme...

Hinweis: Bei MaskColor (0, 0, 0) wird nix sichtbar im Modus (5, 7), da die
Farben addiert werden (daher der Lichteffekte), und x + 0 bleibt nunmal x.
Bild
Benutzeravatar
dllfreak2001
Beiträge: 2925
Registriert: 07.09.2004 23:44
Wohnort: Bayern

Beitrag von dllfreak2001 »

@Ypser Maskcolor kenn ich nicht den Befehl, aber es funzt bei modus(5,7)
mit sicherheit, auch ohne maskcolor!

Achja es gibt jedoch Grafikfehler die im 16Bit Farbmodus auftretten
dann solltest du auf 32-Bit stellen.
Achte auch darauf bei Transparenten Sprites bmp oder png zu nehmen
weil die anderen Formate im zuge der Kompression Farben verfälschen und somit nicht selten auch die transparente Farbe verändern.

Ansonsten hat es Ypser auf den Punkt gebracht.

Übrigens wenn du es schnell machen willst dann nimm lieber eine Große Grafik anstatt viele kleiner Grafiken bis du alle einmal aufgerufen haßt naja. Sprite3D wird sowieso von der Hardware berechnet und der machen solche sachen nix aus. Guck dir mal di Flares in UT, HL oder Quake an, die sind genauso gemacht, mit großen schwarzen Freiflächen. Ich denke Carmack würde es anders machen wenn es nicht schnell genug wäre.
I´a dllfreak2001
Antworten