Bilder verändern, allgemeine Fragen

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

Travis

Betreff: Bilder verändern, allgemeine Fragen

BeitragSo, Sep 11, 2005 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
In BlitzMax gibt es ja Befehle wie SetScale, SetAlpha, SetColor usw. Damit kann man die Größe, Transparenz und Farbe verändern. Allerdings wirkt sich dass dann auf alle Grafikausgaben aus, die nach diesem Befehl ausgeführt werden.

Wenn ich jetzt z.B. nur ein Bild transparent darstellen will, müsste ich es folgendermaßen machen.

BlitzBasic: [AUSKLAPPEN]

SetAlpha 0.5
DrawImage (Bild, ResX/2, ResY/2)
SetAlpha 1.0


Gibt es nicht irgendwie die Möglichkeit die Transparenz für ein Bild festzulegen, damit man es nicht jedesmal neu einstellen muss? Das Gleiche gilt für das Skalieren oder das Färben von Bildern.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
  • Zuletzt bearbeitet von Travis am So, Sep 11, 2005 13:58, insgesamt einmal bearbeitet

regaa

BeitragSo, Sep 11, 2005 13:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, neues Bild erstellen dadrauf das neugealphte draufzeichnen und graben und beim nächsten Zeichnen muss man es nicht mehr einstellen Surprised . Wird aber wohl nicht das optimalste sein.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Jolinah

BeitragSo, Sep 11, 2005 13:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest dir nen Type dafür basteln Wink

Code: [AUSKLAPPEN]
Type Sprite
  Field Alpha:Float
  Field Img:TImage
  Field x, y

  Method Draw()
    Local old_alpha:Float = GetAlpha()
    SetAlpha(Alpha)
    DrawImage Img, x, y
    SetAlpha(old_alpha)
  End Method

End Type

Travis

BeitragSo, Sep 11, 2005 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Guter Tipp, danke. Damit wäre es dann später sehr leicht anzuwenden. Ich mache gerade meine ersten Versuche in BlitzMax. Ich will versuchen Partikelfunktionen mit Transparenz, Rotation, ect. zu schreiben. Damit möchte ich mal die Performance im Vergleich zu B3D testen.
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

lettorTrepuS

BeitragSo, Sep 11, 2005 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Jolinah

BeitragSo, Sep 11, 2005 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja da hast du recht. Die Frage ist dann nur wie man es sonst machen soll Wink Wenn man es "optimiert" und prüfen würde welche Befehle notwendig sind und dann nur diese ausführt wird der Code ebenso gross wegen den ganzen Ifs. Und irgendwie müssen ja die Partikel automatisch verwaltet werden, wie will man da was Hardcoden? Vielleicht hab ich dich auch falsch verstanden.. kenn mich mit Partikelengines nicht so super aus Wink
 

Dreamora

BeitragSo, Sep 11, 2005 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wurden schon Tests gemacht, inwiefern batch optimierung (also zusammenfassen was gleiche states hat) etwas bringen würde. Der Nutzen liegt bei wenigen Prozenten ... der Implementationsaufwand jedoch ist gewaltig und sehr kompliziert.

Das liegt daran, dass BlitzMax SetBlend etc nur wirklich ausführt, wenn es etwas ändert. Sprich unnütze Dinge führt es von Haus aus schonmal nicht aus.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Travis

BeitragSo, Sep 11, 2005 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf das Zurücksetzen der Alpha, Scale und Color Werte nach jedem Sprite, könnte man wohl (oder sollte man sogar) tatsächlich verzichtern. Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

lettorTrepuS

BeitragSo, Sep 11, 2005 20:47
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

bruZard

BeitragMo, Sep 12, 2005 7:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ShadowTurtle hat Folgendes geschrieben:
Travis: In der tat. Warum eigentlich bei 10000 Sprites die Alpha, Scale und Color werte setzen (wie in dem Code), wenn man für das jeweilige Sprite nur einmal das notwendigste zu setzen braucht? Ich will ne Antwort!


BlitzMax basiert auf OGL, dadurch verwendet es ebenso eine State-Machine wie es OGL tut.

Habe ich nun 100 Sprites werde ich sicher nicht nach jedem Zeichnen in einer Schleife den Alphawert zurücksetzen, aber nachdem die Schleife durchlaufen wurde muss ich halt den State wieder auf 1.0 setzen damit nachfolgende Routinen nicht erst prüfen müssen welcher Wert steht und ggf. diesen nochmals ändern müssen. DAS wäre Speedtrash.

Hier mal ein Bsp:

Code: [AUSKLAPPEN]

Type TSprite
   Global _list:TList
   
   Field x:Short
   Field y:Short
   Field alpha:Float
   Field color:Byte[3]
   Field image:TImage
   
   Method New()
      If _list:TList = Null Then _list:TList = New TList
      _list.AddLast(Self)
   End Method
   
   Method Add(x:Short,y:Short
      self.x = x
      self.y = y
   End Method
End Type



Type TSpriteHandler
   Field sprite:TSprite
   
   Method Add(x,y)
      sprite:TSprite = New TSprite
      sprite.Add(x,y)
   End Method
   
   Method Draw()
      If sprite:TSprite<>Null
         
         For sprite:TSprite = EachIn sprite._list
            SetAlpha sprite.alpha
            SetColor sprite.color[0],sprite.color[1],sprite.color[2]
            DrawImage sprite.image,sprite.x,sprite.y
         Next
      
      EndIf
      
      SetColor 255,255,255
      SetAlpha 1.0
   End Method
End Type

(ungetestet!)
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

lettorTrepuS

BeitragMo, Sep 12, 2005 8:12
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

bruZard

BeitragMo, Sep 12, 2005 8:27
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Wieso um alles in der Welt setzt Du den Alphawert mit dem Wert für die Rotation gleich?!?

2. Nichts anderes habe ich gesagt, aber bei einem Partikelsystem ist davon auszugehen dass jedes ausgelesene Partikel einen anderen Alphawert besitzt, somit _muss_ man ihn _vor_ dem Zeichnen eines jeden Partikels setzen.

3. In Deinem Code setzt Du einen Alphawert für den Player ... höchst selten dass der Player transparent ist. Demzufolge kann man in diesem Fall das Setzen des States überflüssig.
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

Jolinah

BeitragMo, Sep 12, 2005 11:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf die ursprüngliche Frage bezogen um ein paar wenige Bilder zu Zeichnen:

Natürlich wäre das Schwachsinn (vom Speed her). Es ist bestimmt schneller wenn man nicht noch extra Speicher reservieren muss. Bei Sachen wo man sowieso weiss das kann sich nur Drehen, ändert aber nie den Alphawert, wäre es unnötig SetAlpha jedesmal aufzurufen.

Ab da wo aber von ner Partikelengine die Rede war hatte ich mich darauf bezogen Wink Dort ändern sich die Werte andauernd, woher will man also wissen was nötig ist und was nicht. Wo ich Bruzard aber recht gebe ist dass GetAlpha etc. nicht nötig wäre bei ner Partikelengine. Da alle Partikel sowieso nacheinander gezeichnet werden kann man ja einfach die Werte für die jeweiligen Partikel setzen.

regaa

BeitragMo, Sep 12, 2005 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
@Bruzard:
ShadowTurtle hat Folgendes geschrieben:
Warum ich nun SetAlpha mit Drehen in verbindung bringe? Ganz einfach. Der gezeigte Code, von Jolinah, soll ja nicht nur Transparenz unterstützen, oder?


Versteh ich nicht!
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

bruZard

BeitragMo, Sep 12, 2005 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
regaa hat Folgendes geschrieben:
@Bruzard:
ShadowTurtle hat Folgendes geschrieben:
Warum ich nun SetAlpha mit Drehen in verbindung bringe? Ganz einfach. Der gezeigte Code, von Jolinah, soll ja nicht nur Transparenz unterstützen, oder?


Versteh ich nicht!


Dann wärst Du auch sicher der Einzige der das versteht ... also: Keine Sorge, alles normal bei Dir Wink
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image

regaa

BeitragMo, Sep 12, 2005 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist ja nicht so als ob es unlogisch ist oder so, wiel das ist es bestimmt nicht, glaub ich zumindest, aber irgendetwas am Satz stört mich so dass ich ihn nicht verstehen kann. Ich glaube es herrscht einfach ein Informationsmangel vor, welcher einen wichtigen Bestandteil vom Sinn verbirgt. Sad
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group