Allgemeine Grafikfragen
Übersicht

![]() |
pileBetreff: Allgemeine Grafikfragen |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo, ich hätte da mal ein paar Fragen die sich mit Grafiken in Blitz beschäftigen.
1. Gibt es Blitz-interne Befehle um Bilder mit Effekten zu versehen? Besonders solche Sachen wie Farbveränderung (Von Bunt zu Schwarz-Weiß) und Weichzeichnung /Unschärfe? Wenn nicht direkt in Blitz, dann eventuell per Api oder DLL. Allerdings dann nur wenn dadurch trotzdem noch eine spürbare Speicherplatzersparnis, denn ansonsten ist es wesentlich komfortabler das gleiche Bild mit diesen Effekten in Photoshop zu erstellen und dann im Programm zu laden, allerdings nimmt ein weiteres Bild ja eben wieder mehr Speicherplatz weg. 2. Wenn ich z.B. mit der Maus über ein Bild fahre soll es sich ändern, also ein weiteres Bild wird drüber gezeichnet. Was ist schneller: Eine If-Abfrage die bestimmt das das erste Bild nicht mehr gezeichnet wird und an dessen Stelle das neue Bild oder keine IF-Abfrage und die beiden Bilder werden einfach übereinander gemalt? Das ganze bei Backbuffer und flip. 3. Ich verwende Backbuffer + flip. Wo liegt der Unterschied zu Frontbuffer bzw. was würde sich in der Ausführung und im Aussehen des Programmes ändern wenn ich statt Back- den Frontbuffer benutzen würde? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu 1.
Mit Blitz3D kann man so einiges machen (Blendfilter) aber die von dir benannten Sachen nur bedingt. Farbe zu S/W kann man zB mit TextureBlend 3 machen, allerdings ohne Grauabstufungen. Blur kann man zB Echtzeitmässig machen, aber auch nur im fortlauf der Programmschleife. Also nichts mit Jetzt Bild Blur, und jetzt nicht. Zu 2. Am schnellsten wird es wohl sein. ql:If ql:RectsOverlap ... ql:Then ... ql:Else Zu 3. Frontbuffer ist das was du siehst, also das was auf dem Bildschirm grade zu sehen ist. Backbuffer ist sozusagen ein zweiter Bildschirm mit gleicher Auflösung und Farbtiefe im Hintergrund, welchen man nicht sieht. Mit Flip werden dann beide Bildschirme getauscht (Vollbild) oder Hintergrund wird zum Vordergrund kopiert (Fenster). Das tauschen geht sehr schnell, also keine Sorge. Zeichnest du nur im Frontbuffer, so wird die Grafik flimmern, weil man den Bildschirmaufbau sieht. Backbuffermodus ist meistens auch schneller, trotz Flip. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dank dir für die ausführlichen Erklärungen.
Zu 1.: Also sind diese Effecte, besonders im 2D Bereich eher nicht so doll. Zu 2.: Soll wohl heißen If-Abfrage ist schneller ^^ Zu 3.: Also gibt es keinen Grund "SetBuffer Frontbuffer" einzusetzen? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
3. villeicht einen ladebalken?? geht aber auch mit flip | ||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, Frontbuffer hat schon seine Daseinsberechtigung. Wenn man zB wie FTC schon erwähnte ein Ladebalken machen will, gehts halt so meistens etwas einfacher, aber auch für andere Dinge. Für Spiele und Animationen eigendlich immer Backbuffer benutzen.
Zu 2. Mein Argument sollte auf Else zielen, weil so kann man mit nur einer Abfrage beides lösen und es wird denoch immer nur eines gezeichnet. Alles andere würde doppeltes zeichnen oder mehrere If-Abfragen benötigen. Allerdings sind If-Abfragen unter Blitz wirklich sehr schnell, so das man das echt vernachlässigen kann. Optimierung findet man meistens an ganz anderen Stellen. Manchmal auch recht suspekte, die sich kaum erklären lassen, nur weil eine Reihenfolge geändert wird etc. Hängt also auch immer davon ab, welche Informationen im Cache gehalten werden können und von anderen Funktionen wieder gebraucht werden etc... |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: geht aber auch mit flip
Hm, ok. Sezt man Flip jetzt nur im Zusammenhang mit "Setbuffer Backbuffer()" ein oder wie? Also ich nehme Flip grundsätzlich immer (na gut ich nehm ja auch eigentlich Backbuffer immer) |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Flip tauscht (bei Vollbild) Backbuffer mit dem Frontbuffer. So eine art Pointer, der der Grafikkarte sagt ''ab jetzt den Bildschirminhalt ab Adresse xxx lesen'' und bei nochmaligen Flip wieder alte Adresse. Im Fenstermodus wird halt kopiert (logisch, geht ja nicht anders, weil Windows ja im grunde noch dargestellt werden muss).
Flip ist also im Zusammenhang mit Setbuffer Backbuffer() einzusetzen. Für folgendes wäre Backbuffer nicht sehr Sinnvoll: Code: [AUSKLAPPEN] Graphics 720,400,0,2
SetBuffer FrontBuffer() Line 0,200,719,200 For x=0 To 719 Plot x,200-Sin(x)*100 Next FlushKeys WaitKey Weil hier nur die Kurve dargestellt wird und gleich danach das Programm beendet wird.^^ |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, also grob zusammengefasst: Backbuffer malt erst alle Grafiken im Hintergrund und dann wird geflipt dann sieht man die soeben im Hintergrund gemalten Grafiken auf seinem Bildschirm und es wird wieder neu im Hintergrund gemalt. Richtig so?
Und Frontbuffer malt halt alle im Vordergrund, so wird es gleich angezeigt, auch richtig so? Wenn ja, kann man dann nicht gleich "Setbuffer Fronbuffer" weglassen und sich so etwas Code sparen? Denn wenn man gar kein Buffer benutzt hat man doch eigentlich den selben Effekt wie mit Frontbuffer oder? |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst auch Graphics weg lassen. Folgender Code funktioniert:
Code: [AUSKLAPPEN] Rect 20,20,360,260,1
WaitKey Ich würde es aber generell nicht so machen, weil schon Blitz+ andere Vorgaben als BB/B3D hat. Und ja, mit SetBuffer BackBuffer() malst du immer* im Hintergrund und Flip wechselt dann zwischen Hintergrund und Vordergrund. Danach mal man wieder automatisch im Hintergrund, wobei im Vollbild dann eine andere Speicheradresse (Pointer) dafür benutzt wird, was aber einem egal sein kann. *mit Ausnahme dem Befehl Print, der immer im FrontBuffer zeichnet. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
pile |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok, vielen vielen Dank für die Auführlichen Antworten, das hat mir sehr geholfen. ![]() |
||
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238% |
![]() |
NoobodyBetreff: Bilder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Und wenn du ein Bild haben willst, das sich ändert wenn die Maus drüberfährt, würde ich, anstatt zwei Bilder zu laden, beide Bilder in eine Datei Packen und dann LoadAnimImage() laden.
Dann kannst du einfach das Frame ändern, das gerade angezeigt wird. Das spart unnütze Variablen ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group