problem mit meiner 3d-Tilemap!

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Apprauuuu

Betreff: problem mit meiner 3d-Tilemap!

BeitragSa, Aug 20, 2005 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Shocked

Ich bin neuerdings dabei auch mal Blitz 3d zu lernen und habe schon mein erstes Problem....

Ich will ne 3d-Tilemap machen und das klappt auch schon ganz gut
Hier mal der Code:

Code: [AUSKLAPPEN]
map_hoch = 100
map_breit = 100

Graphics3D 640,480,16,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,10,-10,-5
RotateEntity camera , -25, 0, 0
licht=CreateLight()
RotateEntity licht,90,0,0
Dim mapvertex(map_breit,map_hoch,1,1)
Dim mapsurface(map_breit,map_hoch)

brush=LoadBrush("textur.PNG")
brush2=LoadBrush("textur2.PNG")
map=CreateMesh()
EntityPickMode map, 2

For x = 0 To map_breit - 1
   For y = 0 To map_hoch - 1
      mapsurface(x, y) = CreateSurface(map, brush)
      mapvertex(x, y, 1, 0) = AddVertex(mapsurface(x, y),1+x,0-y,0, 1, 0)
      mapvertex(x, y, 1, 1) = AddVertex(mapsurface(x, y),1+x,-1-y,0, 1, 1)
      mapvertex(x, y, 0, 1) = AddVertex(mapsurface(x, y),0+x,-1-y,0, 0, 1)
      mapvertex(x, y, 0, 0) = AddVertex(mapsurface(x, y),0+x,0-y,0, 0, 0)
      AddTriangle(mapsurface(x, y),mapvertex(x, y, 1, 0),mapvertex(x, y, 1, 1),mapvertex(x, y, 0, 1))
      AddTriangle(mapsurface(x, y),mapvertex(x, y, 0, 0),mapvertex(x, y, 1, 0),mapvertex(x, y, 0, 1))   
      PaintSurface mapsurface(x, y), brush
Next
Next
UpdateNormals map

While Not KeyHit(1)
maus_x = MouseX()
maus_y = MouseY()
tileauswahl=CameraPick(camera,maus_x, maus_y)
If tileauswahl <> 0 And MouseDown(1) Then
   tileauswahlsurface = PickedSurface()
   PaintSurface tileauswahlsurface, brush2
EndIf
RenderWorld
Flip
Wend
End


Das Problem hier ist, dass das ganze sehr langsam läuft....
Bei der 100*100-Map fängt die ganze Geschichte hierschon an zu stocken und ich wollte eigentlich schon mindestens problemlos 300*300 große Maps erstelllen können (bei wc III gehts soggar bis aus 512*512 und das Spiel hat recht niedrige Systemanforderungen).

Hat das jetzt ein wenig Editwor-like gemacht, dass wenn man irgdnwo drauf klickt ein Grastile durch Wasser ersetzt wird (nur so zum üben, also wer sich fragt was das pick unen im Code soll ^^)

Kann mir hier jemand helfen, um so ne Tilemap schneller ans laufen zu bringen??[/syntax]
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Mr.Keks

BeitragSa, Aug 20, 2005 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
du darfst nicht für jedes tile ein eigenes surface erstellen! das verlangsamt das ganze unheimlich!
MrKeks.net

Apprauuuu

BeitragSa, Aug 20, 2005 12:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber wenn ich alles in einem Surface habe, kann ich doch nicht mehr die einzelnen Felder einzeln texturieren (brushen)????
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Mr.Keks

BeitragSa, Aug 20, 2005 14:07
Antworten mit Zitat
Benutzer-Profile anzeigen
aber dann brauchst du immernoch nur ein surface für jede mögliche terraintexture und nicht für jedes tri. und du müsstest halt die tris je nach texture dem entsprachenden surface zuordnen.

das warcraft3terrain besteht, soweit ich das beobachtet habe, aus layern. du hast also ein paar terrains übereinander, die für all die übereinander kommenden untergrundtypen stehen. also z.b. sand, matsch, gras, dunkles gras, straße. das sind dann fünf surfaces. für jedes nimmst du dir eine art tileset. also z.b. sowas hier wie das von timemill.
user posted image
allerdings lässt du da das braune weg. das müsstest du transparent machen. es gibt nur immer randtiles und der rest ist transparent. durch uvkoordinaten sorgst du nun dafür, dass auf einem tri genau der teil der tilemap zu sehen ist, den du als tile haben möchtest.

hier musst du aufpassen. unter umständen sieht man dann noch einen teile eines anderen tiles. um das zu verhindern, musst du immer am rand jedes tiles einen pixel wiederholen, also effektiv nur 14*14-pixeltiles haben, wenn es eigentlich 16*16 wären.

fürs spiel optimierst du dann indem, du all die verdeckten oder ohnehin unsichtbaren tiles löschst.
MrKeks.net

Apprauuuu

BeitragSo, Aug 21, 2005 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
UI danke sehr! Very Happy


Hab das jetzt so hinbekommen....
Also nen großen 1-Tileboden aus gras gemacht, der so groß wie die Map ist und da drauf dann die anderen Tiles, falls welche benutzt werden ^^

Klappt bisher alles...
Werd mich wieder melden, falls es irgendwelche neuen Probleme gibt Shocked
Arbeitsstand:
Umprogrammierung von LOL³Warriors und LOL³Fighters in Bmax...
LOL³Fighters wird spielerisch noch mal ordentlich aufpoliert, um es Ligatauglich zu machen (zumindest für private Funligen von mir ^^)

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group