Iso mit 3d

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

coolo

Betreff: Iso mit 3d

BeitragDi, Dez 25, 2007 23:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Grüß Gott,

Ich wollte mich mal ans Thema isometrie wagen, doch da stellt sich die Frage wie mache ich das. Da habe ich es auf die 2d Variante probiert. Hab es nicht zusammengebracht. Da habe ich mir überlegt, könnte ich das nicht mit 3d in Sprites machen (evtl. draw 3d?), wenn das Vorteile hätte, wei sollte ich das anstellen, wenn es keine Vorteile hätte, wie mache ich es in 2d? Weil wenn ich es 3d machen würde, müsste ich wieder Modelle machen->kann ich nicht. Hoffentlich bekomme ich gute Antworten.

Ps: Ich war mir nicht sicher ob ich hier sicher bin.
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

The_Nici

BeitragDi, Dez 25, 2007 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Sprites und Modelle haben wenig miteinander gemeinsam. Sprites malt man, man modelliert sie nicht.

Bei isometrie kommt es eigentlich auf die Zeichentechnik draufan.
Nehmen wir ein 64x32-Tile, bei dem jede Längen und Breitenmitte miteinander verbunden ist, also zu einem Rhombus geformt ist.
Nun, wir haben 64/2=32. das heisst, ein Tile nebendrann muss 32 Pixel weiter entfernt sein. Jedoch überschneiden die sich dann! Wir müssen also noch 16 oben oder unten nehmen.
Code: [AUSKLAPPEN]

<><>
<><>
<><>
<><>
<><>

Wie wir sehen passt da wahrlich noch was dazwischen.
Warte, Code:
Code: [AUSKLAPPEN]

Graphics 640,480,0,2
tile=CreateImage(64,32)
SetBuffer ImageBuffer(tile)
Line 32,0,64,16
Line 32,0,0,16
Line 0,16,32,32
Line 32,32,64,16
SetBuffer BackBuffer()

For y=0 To 14
   For x=0 To 9
      DrawImage tile, x*64, y*32
   Next
Next
Flip
WaitKey()
End

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Dez 26, 2007 0:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@coolo, es gibt verschiedene arten eine Iso-Map zu erstellen.

- Map ist mit dem Bildschirm ausgerichtet, die Tiles aber werden jede zweite Reihe um eine halbe Tilebreite seitlich verschoben um ineinander zu passen. Vorteil: Es wird nur soviel gezeichnet, was unbedingt notwentig ist und die Map kann man sich leichter vorstellen. Nachteil: Pathfinding und allgemeine Mapbewegung wird kompliziert angesteuert.

- Map ist um 45° gedreht und dann in ihrer Höhe um die hälfte gestaucht. Vorteil: Die Map ist leicht ansteuerbar (fast wie eine normale 2D-Map). Nachteil: Die Map ist nicht mehr so leicht vorstellbar, da sie für den User immer ''gedreht'' erscheint.

Was nun Draw3D da nutzen soll, weiß ich im Moment nicht. Der einzige Vorteil hier die Draw3D zu nutzen währe, dass besonders kleine Tiles schneller bearbeitet werden. Dadurch kann man bei kleinen Tiles (so um 32x16 Pixel) sehr viel Recourcen einsparen.

Gerade als Iso-Map kann ich mir aber 3D in einem anderem Bezugspunkt besser vorstellen als meine Draw3D. Lasse doch die Grafikkarte berechnen anstelle deines Prozessors. Die Recourceneinsparung hier ist enorm. Was du brauchst ist eine Singlesurface-Funktion, die dir ganze Tileblöcke gescheit zusammenpackt.

Hier ein uralter ganz billiger 3D-Iso-Map-Test von mir wie sowas dann aussehen würde:

Code: [AUSKLAPPEN]
Graphics3D 400,400,0,2
SetBuffer BackBuffer()
Local Timer=CreateTimer(50)

Local Camera=CreateCamera()
PositionEntity Camera,12,16,-12
RotateEntity Camera,30,45,0
CameraProjMode Camera,2
CameraZoom Camera,.125

Local Light=CreateLight()
RotateEntity Light,70,30,0

Local Ball=CreateSphere(16)
PositionEntity Ball,0,6.5,0
ScaleEntity Ball,.25,.25,.25
EntityRadius Ball,.25
EntityParent Camera,Ball
EntityType Ball,1

For z=-3 To 3
   For x=-3 To 3
      If Rand(10)<>9
         Local Cube=CreateCube()
         PositionEntity Cube,x*2,0,z*2
         If Rand(20)=1 Then MoveEntity Cube,0,1,0
         EntityColor Cube,255,Rand(128),0
         EntityType Cube,2
      End If
   Next
Next

Collisions 1,2,2,2




While Not KeyHit(1)
   If KeyDown(203) Then MoveEntity Ball,-.05,0,-.05
   If KeyDown(205) Then MoveEntity Ball,+.05,0,+.05
   If KeyDown(200) Then MoveEntity Ball,-.05,0,+.05
   If KeyDown(208) Then MoveEntity Ball,+.05,0,-.05
   MoveEntity Ball,0,-.1,0
   
   WaitTimer(Timer)
   UpdateWorld
   RenderWorld
   Flip 0
Wend
End


Dieser Code ist absolut nicht spielegeeignet! Soll also echt nur anzeigen, wie sowas aussehen könnte. Der Vorteil hier ist natürlich, dass die Grafikkarte komplett die Kollisionsabfrage und den Z-Order macht. Es fehlt das ganze noch als gescheite Singlesurface mit UV-Map und aufgeteilt in Blöcke.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

coolo

BeitragMi, Dez 26, 2007 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für eure äußerst hilfreiche Antworten. Mir hat das Beispiel von hectic, wirklich geholfen. Werde es jetzt auch so machen. Und der Beitrag von The_nici war auch hilfreich, Habs jetzt geschafft.

Edit: So jetzt habe ich mir mal den Code ordentlich angeschaut und probiert->verstanden. Jetzt kommen einige Fragen auf, Hectic hat was von Singel surface geredet. Hab die sufu bentzt, hab ber nichts verstanden. Was ist das und was macht das? Und zweitens: Wenn ich jetzt Häuser bauen will, Kann ich da nicht auch sprites verwenden? weil modellieren bringt ja nichts, wenn man es nur von einer Seite anzeigt...
http://programming-with-design.at/ <-- Der Preis ist heiß!
That's no bug, that's my project!
"Eigenzitate sind nur was für Deppen" -Eigenzitat

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group