AlphaMaske + Textur. Aber natürlich nicht nur mit der internen SpriteEngine von PureBasic.Kaeru Gaman hat geschrieben:nur is gut... wie geht das?DarkDragon hat geschrieben:Oder meinst du etwa nur die Strahlen?
(performant, einfach, praktikabel)
Blendeffekte
-
DarkDragon
- Beiträge: 6291
- Registriert: 29.08.2004 08:37
- Computerausstattung: Hoffentlich bald keine mehr
- Kontaktdaten:
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.
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
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?
...
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
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...
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.
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
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
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
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.
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
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
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...
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.
- Ypser
- XMas-Contest-Gewinner '03
- Beiträge: 128
- Registriert: 29.08.2004 14:35
- Computerausstattung: Win7
- Wohnort: Ingelheim
- Kontaktdaten:
Und das sagte dir WER genau?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....
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.
- dllfreak2001
- Beiträge: 2925
- Registriert: 07.09.2004 23:44
- Wohnort: Bayern
@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.
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
