Viewport

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Reborn

Betreff: Viewport

BeitragSa, Jul 21, 2007 23:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich hab mal eine Frage zur Funktionsweise des Befehls "Viewport". Dadurch wird ja ein Bereich festgelegt, in dem Grafiken gezeichnet werden sollen und alle, die drübergehen werden abgeschnitten.

Aber wie funktioniert das genau? Ich habe in meine Codes nämlich bisher immer zu Anfang "Viewport 0, 0, gfx_x, gfx_y" geschrieben, damit auch wirklich nur Bilder gezeichnet werden, die auch zu sehen sind. Auf meiner Tilemap werden jedoch auch außerhalb dieses Bereiches Tiles gezeichnet.
Reicht es, um Rechenleistung zu sparen, den Viewport auf den Bildschirmbereich zu beschränken oder muss ich es nochmal extra programmieren, dass nur Tiles gezeichnet werden, die auch zu sehen sind? (Ich zweifle mittlerweile nämlich daran, ob ich den Befehl richtig verstanden habe und ob die Grafiken vielleicht nicht doch gezeichnet und dann abgeschnitten werden, was in Sachen Geschwindigkeit dann wohl keinen großen Vorteil bringen würde...)

aMul

Sieger des Minimalist Compo 01/13

BeitragSo, Jul 22, 2007 0:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Befehl ist völlig ungeeignet um Leistung zu sparen. Man kann mit ihm nur verhindern, dass bestimmte Bereiche nicht "übermalt" werden.

Du musst dein Spiel wohl oder übel selber prüfen lassen, was wann gezeichnet werden muss...

Außerdem kann der Viewport eh nicht größer sein, als der verwendete Buffer...
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Jul 22, 2007 0:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn Viewport 0, 0, gfx_x, gfx_y bei dir der ganze Bildschirm gemeint ist, so macht Blitz das schon von alleine. Du kannst im Grunde garnicht ausserhalb des Bildschirmes wirklich zeichnen, da dafür garkein Speicher auf der Grafikkarte freigegeben wird. Viewport ist zB bei 3D-Sachen sehr Sinnvoll, aber auch für zB Tilemaps, wo umrum Menü etc. noch zu sehen sind, die nicht übermalt werden sollen. Wobei man das auch anders umgehen kann. Kommt halt immer drauf an.

Bei Tilemaps geht's übrigens sehr einfach das anders zu löschen.

Wenn du ein zweidimensionales Tilemap erstellt hast, so kannst du das notwendige anhang der Mapposition aus dem Dim-Feld auch nur so auslesen lassen.

Immer wieder gern ein uralter Code: [AUSKLAPPEN]
;Grafik setzen
Graphics 320,320,0,2
SetBuffer BackBuffer()

;Variablen festlegen
Dim xy%(99,99)   ;Spielfeldspeicher mit 100*100 Tiles
xp#=1000   ;X-Position im Spielfeld
yp#=1000   ;Y-Position im Spielfeld
dvx%=0   ;X-Faktor für Tileverschiebung
dvy%=0   ;Y-Faktor für Tileverschiebung
tpx%=0   ;X-Faktor für Dim-Tilesprung
tpy%=0   ;Y-Faktor für Dim-Tilesprung
mx#=0   ;X-Position Maus
my#=0   ;Y-Position Maus

;Felder
For y=0 To 99
 For x=0 To 99
  If Rand(0,10)>8 Then xy(x,y)=Rand(1,6)
 Next
Next

;Rahmen
For q=0 To 99
 xy(0,q)=6
 xy(q,0)=6
 xy(99,q)=6
 xy(q,99)=6
Next




;Hauptroutine
While Not KeyHit(1)

 ;Rechne
 mx=MouseX()
 my=MouseY()
 xp=xp-(160-mx)/20
 yp=yp-(160-my)/20
 If xp<0 Then xp=0
 If yp<0 Then yp=0
 If xp>2943 Then xp=2943
 If yp>2943 Then yp=2943
 dvx=xp Mod 32
 dvy=yp Mod 32
 tpx=Floor(xp/32)
 tpy=Floor(yp/32)

 ;Tiles
 For y=0 To 8
  For x=0 To 8
   Color xy(x+tpx,y+tpy)*32,0,0
   Rect 32+x*32-dvx,32+y*32-dvy,32,32,1
  Next
 Next

 ;Info
 Color 255,255,255
 Rect 32,32,256,256,0
 Text 0,0,xp
 Text 0,16,yp
 Flip
 Cls
Wend
End

Du siehst den weißen Rahmen, der die Bildschirmbegrenzung darstellen soll. Es werden nur die Tiles gezeichnet, die man also auch nur sehen kann. Der Rest wird garnicht erst ausgelesen bzw. gezeichnet. Für ein reeles System würde natürlich der weiße Rahmen verschwinden und die Zeichnereichweite jeweils um ein Tile in jede Richtung erweitert.

Ist übrigens ein uralter Code von mir, der sicherlich noch optimiert werden kann.^^

Mit der Maus kannst du rumscrollen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Reborn

BeitragSo, Jul 22, 2007 0:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, dann sage ich danke für die schnelle Hilfe und streiche den Viewport Befehl aus meinem Code. Danke für das Beispiel, hectic. Das hatte ich genauso vor, ist ja zum Glück kein Aufwand. Smile

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group