Komischer Effekt bei Iso-Darstellung

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Nox

Betreff: Komischer Effekt bei Iso-Darstellung

BeitragDi, Okt 26, 2004 13:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

Ich arbeite seit einigen Tagen an einer kleinen, schlechten Iso-Engine (2D) und bemerkte einen ziemlich "merkwürdigen" Effekt. Und zwar folgendes:

Ist der Teil der Map, der dargestellt wird, nur zur Hälfte ausgefüllt (sprich das Programm überspringt die Hälfte der Tiles, da diese transparent sind), dann habe ich weniger FPS, als wenn der komplette Screen gefüllt wird.

Merkwürdig ist halt, dass die Rendering-Time von ca. 3-4ms auf max. 7 ms ansteigt, allerdings auch die FPS.

Ist das möglich oder habe ich da meinen FPS-Code versaut? ^^

Screen als "Beweis": (128kb)
http://www.pressure-team.de/bb/iso1.jpg



Greets,
Nox

Jan_

Ehemaliger Admin

BeitragDi, Okt 26, 2004 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
dazu müsste ich den Code sehen.
between angels and insects
 

David

BeitragDi, Okt 26, 2004 13:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Jo, post mal den relevanten Code hier rein, bin mir sicher das hier niemand hellsehen kann..

Achja, ist das wirklich ISO Perspektive? Sieht garnicht so aus... :S

grüße
 

Dreamora

BeitragDi, Okt 26, 2004 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht für mich auch eher nach TopDown als Iso aus.

Vielleicht ist dein Culling Code nicht optimal oder deine Berechnungsroutinen falsch.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Nox

BeitragDi, Okt 26, 2004 13:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, es ist - schon ganz richtig erkannt - nicht wirklich isometrisch. Denn die Isometrie hat ja einen festen Winkel zum Betrachter, welchen ich einfach mal ignoriert habe (bei mir sind's 45°, so ganz im Ultima Online-Stil ^^).

Relevanter Code hier:

Code: [AUSKLAPPEN]

   renderstartms = MilliSecs()
   
   DrawMap()
   
   Text 5, 5, "Coords: ("+GetMouseTX()+", "+GetMouseTY()+")"
   Text 700,5, "Selected:"
   DrawImage GetTileTexture(editid), 720, 25

   ms = MilliSecs()

   renderms = ms - renderstartms
   fpsms = fpsms + renderms
   fpstemp = fpstemp + 1
   
   If (ms - fpsms >= 500) Then
      fps = fpstemp * 2
      fpsms = ms
      fpstemp = 0
   EndIf



EDIT: Hier noch die Draw-Routine der Map:
Code: [AUSKLAPPEN]

; Draws the map
Function DrawMap()
   
   drawx = 0
   drawy = 0
   tilex = 0
   tiley = 0
   
   
   ; === DRAWING ENGINE ===
   For y = posy To posy + 49
      For x = posx To posx + 49
      
         drawx = (SCREEN_WIDTH / 2 - 16) + (16 * tilex) - (tiley * 16) - offsetx + offsety
         drawy = -432 + (tiley * 16) + (tilex * 16) - (tiles(x,y)\z%) - offsety - offsetx

         ; Only draw if the tile is visible on the screen
         If drawx > -32 And drawx < SCREEN_WIDTH And drawy > -32 And drawy < SCREEN_HEIGHT Then
            DrawTile tiles(x,y)\texture%, drawx, drawy
            
            ; **** DEBUG SHIT *>>>
            If x = 11 And y = 30 Then
               DrawImage texChar(0), drawx - ImageWidth(texChar(0))/2+16, drawy - ImageHeight(texChar(0)) + 16
            EndIf
            ; **** DEBUG *****<<<
         EndIf
         
         tilex = tilex + 1
      
      Next
      
      tilex = 0
      tiley = tiley + 1
   Next
End Function



Biddeschö'.

Jan_

Ehemaliger Admin

BeitragDi, Okt 26, 2004 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Was macht der "DEBUG SHIT"?
between angels and insects
 

Nox

BeitragDi, Okt 26, 2004 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Huch, ignoriert mal das dumme Kommentar. Very Happy
Das zeichnet lediglich die Figur, die man auf dem Screen sieht. Smile
 

hot-bit

Gast

BeitragDi, Okt 26, 2004 13:40
Antworten mit Zitat
Hoi ...


tztztz...

Steht doch da !

Toni

Hubsi

BeitragDi, Okt 26, 2004 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
@hot-bit: Kannst Du dir deine unnötigen Kommentare nicht einfach sparen? Oder hast Du im RL nichts zu sagen?
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Nox

BeitragDi, Okt 26, 2004 13:52
Antworten mit Zitat
Benutzer-Profile anzeigen
lol... Very Happy

Also um nochmal zurück zum Thema zu kommen: Inwiefern die DrawMap()-Funktion jetzt falsch ist, dürfte ja _eigentlich_ keine Rolle spielen, denn mein Problem (oder auch nicht?) liegt ja bei den FPS vs. Rendertime. Ich find's halt etwas merkwürdig, dass ich deutlich mehr FPS erziele, umso höher die Render-Time ist...

EDIT: Okay, Fehler gefunden:

Code: [AUSKLAPPEN]

fpsms = fpsms + renderms


Das musste weg... Rolling Eyes
 

hot-bit

Gast

BeitragDi, Okt 26, 2004 14:03
Antworten mit Zitat
Hoi..

@Hubsi:

Was soll das jetzt ?

Dieser Kommentar war nötig, denn wenn man die paar Zeilen nicht lesen und richtig interpretieren kann, braucht man hier gar nichts zu posten, denn dann wäre es sinnlos, da man ja nicht kapiert, um was es geht.

Oder liege ich da falsch ?

Toni

Jan_

Ehemaliger Admin

BeitragDi, Okt 26, 2004 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, ja, klar, das ich da nciht selber drauf gekommen bin,
Code: [AUSKLAPPEN]
   ; **** DEBUG SHIT *>>>
            If x = 11 And y = 30 Then
               DrawImage texChar(0), drawx - ImageWidth(texChar(0))/2+16, drawy - ImageHeight(texChar(0)) + 16
            EndIf
            ; **** DEBUG *****<<<


muss ja eine Figur Zeichnen, wie es Debugshit = Figur, oder?
mir musste doch auffallen, das eine Figur immer an x11 und y30 gezeichnet wird.

@ Hotbit, du bist echt super!
between angels and insects
 

hot-bit

Gast

BeitragDi, Okt 26, 2004 15:08
Antworten mit Zitat
Hoi..

Doch Jan_.
Das hätte dir doch einleuchten müssen.
Da ist eine Schleife für x und eine Schleife für y. Und wenn x=11 und y=30 ist, wird ein Bild gezeichnet.

Was ist da dran nicht zu verstehen ?

Hätte mir doch etwas mehr von dir erwartet. Hmmm, vielleicht warst nicht ausgeschlafen Smile

Obwohl das Code-Schnipsel totaler Schwachsinn ist, weil da eine Abfrage stattfindet, die eigentlich gar nicht hierhin gehört.

Der soll seine Figur NACH Abarbeitung der Schleifen zeichnen lassen !


Toni
 

Nox

BeitragDi, Okt 26, 2004 16:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Der soll seine Figur NACH Abarbeitung der Schleifen zeichnen lassen !


Sorry, aber DAS ist Schwachsinn. Es ist enorm wichtig, alles, was eine Position hat, nacheinander abzuarbeiten. In meinem Fall alle x-Reihen nacheinander (x-Reihe von oben links nach unten rechts).

Stelle dir mal vor, der Z-Wert (entspricht der Höhe eines Tiles) eines Tiles, sagen wir an Position (5 | 5), ist um einiges höher als jener vom Tile an Position (5 | 4).

Zeiche ich nun zuerst alle Tiles, sprich die Map (also Schleifendurchgänge abarbeiten), und danach eine Figur an Position (5 | 4), wird diese das Tile an (5 | 5) überzeichnen, obwohl sie eigentlich etwas verdeckt sein müsste.

Problematik erkannt?
 

getlose

BeitragDi, Okt 26, 2004 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
2 layer wäre auch ne lösung
 

Nox

BeitragDi, Okt 26, 2004 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verwende absichtlich keine Layer im klassischen Sinne, da stapelbare Items oder jene, die übereinander dargestellt werden sollen, nicht "endlos" möglich sind.
Als Vorzeigebeispiel kann man sich einfach Ultima Online ansehen.

BladeRunner

Moderator

BeitragDi, Okt 26, 2004 17:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach 2 layer und unterteile das 2. layer in highword und loword.
diese geben dann den index von ID und anzahl der Gegenstände eines Containertypes an in dem die Items gespeichert sind. dann kannst du stapeln bis der arzt kommt. (lmmerhin 65k ID s möglich mit 65k items drauf.)
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

hot-bit

Gast

BeitragDi, Okt 26, 2004 17:27
Antworten mit Zitat
Hoi..

Und der MaskImage- Befehl ist wohl ausgestorben ?

Oder er wird wegen Schlecht-Wetter nicht mehr gebraucht ?

Wenn die Figur, die du da zeigst auf deinem Screnn alles ist, was du hinzeichnest, wo gibt es dann da eine Problematik ?

Toni
 

Nox

BeitragDi, Okt 26, 2004 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner:
So bin ich das noch garnicht angegangen, vielen Dank für die Info. Smile

@hot-bit:
Für dich werde ich einen exklusiven Screenshot erstellen, um die Problematik zu verdeutlichen. Ist gleich hochgeladen..

EDIT: So, erstmal die falsche Variante (erst Map zeichnen, dann die Figur):
http://www.pressure-team.de/bb/falsch.jpg

Und nun die richtige Variante (gezeichnet, während an richtiger Position):
http://www.pressure-team.de/bb/richtig.jpg

Ich hoffe, es ist für dich nun endgültig klar, dass auch MaskImage damit rein garnix zu tun hat... (hättest du den 1. Screen mit genug Aufmerksamkeit betrachtet, hättest du entdeckt, dass die Figur mit MaskImage gezeichnet wurde...)[/url]
 

hot-bit

Gast

BeitragDi, Okt 26, 2004 21:11
Antworten mit Zitat
Hoi..

Alles klar ...

Toni

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group