Bilder verändern, allgemeine Fragen
Übersicht

![]() |
TravisBetreff: Bilder verändern, allgemeine Fragen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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]
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, neues Bild erstellen dadrauf das neugealphte draufzeichnen und graben und beim nächsten Zeichnen muss man es nicht mehr einstellen ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest dir nen Type dafür basteln ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja da hast du recht. Die Frage ist dann nur wie man es sonst machen soll ![]() ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Auf das Zurücksetzen der Alpha, Scale und Color Werte nach jedem Sprite, könnte man wohl (oder sollte man sogar) tatsächlich verzichtern. ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
lettorTrepuS |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger. | ||
![]() |
bruZard |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32
User posted image |
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group