Seite 2 von 3
Verfasst: 12.11.2005 13:07
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.
Verfasst: 12.11.2005 22:14
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
Verfasst: 13.11.2005 00:27
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...
Verfasst: 13.11.2005 18:28
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
Verfasst: 14.11.2005 11:58
von dllfreak2001
Meine Verwirrung ist groß.
Was willst du denn machen?
willst du jetzt jeden Strahl Echtzeit berechnen?
Verfasst: 14.11.2005 15:26
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

Verfasst: 14.11.2005 21:06
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.
Verfasst: 15.11.2005 14:15
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...
Verfasst: 15.11.2005 14:31
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.
Verfasst: 15.11.2005 15:41
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.