3D-Tilemap: Bei größeren Maps, MAV

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

BtbN

Betreff: 3D-Tilemap: Bei größeren Maps, MAV

BeitragSa, Okt 08, 2005 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Function AddRect(mesh,surf,x#,y#,w#,h#,u1#,v1#,u2#,v2#)
Local ve1 = AddVertex(surf,x#,0,y#,u1#,v2#)
Local ve2 = AddVertex(surf,x#,0,y#+h#,u1#,v1#)
Local ve3 = AddVertex(surf,x#+w#,0,y#+h#,u2#,v1#)
AddTriangle(surf,ve1,ve2,ve3)
Local ve4 = AddVertex(surf,x#+w#,0,y#+h#,u2#,v1#)
Local ve5 = AddVertex(surf,x#+w#,0,y#,u2#,v2#)
Local ve6 = AddVertex(surf,x#,0,y#,u1#,v2#)
AddTriangle(surf,ve4,ve5,ve6)
End Function

Dim map(1,1)
file = ReadFile(\"map0.txt\")
mapw = ReadInt(file)
maph = ReadInt(file)
Dim map(mapw-1,maph-1)
For x = 0 To mapw-1
For y = 0 To maph-1
map(x,y) = ReadShort(file)
Next
Next

Graphics3D(800,600,32,2)
SetBuffer BackBuffer()

CamPivot = CreatePivot()
Cam = CreateCamera(CamPivot)
TranslateEntity(Cam,0,3,0)
MoveEntity(Cam,0,0,-3)
TurnEntity(Cam,35,0,0)

tex1 = LoadTexture(\"tex1.png\")

mesh1 = CreateMesh()
surf1 = CreateSurface(mesh1)
For x = 0 To mapw-1
For y = 0 To maph-1
Select map(x,y)
Case 1
AddRect(mesh1,surf1,x,y,1,1,0,0.5,0.5,1)
Case 2

Case 3

Case 4

End Select
Next
Next

UpdateNormals(mesh1)

EntityTexture(mesh1,tex1)

Global zeit#,timer=MilliSecs()

Repeat

zeit# = (MilliSecs()-timer)/1000.0
timer = MilliSecs()

Cls

If KeyDown(203) Then
TurnEntity(CamPivot,0,45*zeit#,0)
EndIf
If KeyDown(205) Then
TurnEntity(CamPivot,0,-45*zeit#,0)
EndIf
If KeyDown(200) Then
MoveEntity(CamPivot,0,0,4*zeit#)
EndIf
If KeyDown(208) Then
MoveEntity(CamPivot,0,0,-4*zeit#)
EndIf

UpdateWorld
RenderWorld

Flip
Until KeyHit(1)

End


In dem Map file sind am Anfang 2 Ints, und dann Shorts, die das Tile angeben, doch wenn ich die maps schon auf eine geringe größe setze(50x50), gibts ne Mav, und der Debugger zeigt auf den RenderWorld Befehl(???).

Woran liegt das?
 

ZhangHe2

BeitragSo, Okt 09, 2005 2:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wollte mir dein Code jetzt nicht angucken sind aber wahrscheinlich zu viele Vertices pro Surface.

BtbN

BeitragSo, Okt 09, 2005 9:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, kurzübersicht:
Ich habe nur EIN EINZIGES Sourface und eine test-Textur mit vier Tiles, die ich je nachdem, wies in der map-Datei steht, auf 2 Triangles setze, die ein Quadrat bilden. Also soll ich, wenn ich eine bestimmte anzahl Triangles habe, schlicht nen neues Sourface erstellen?
 

BIG BUG

BeitragSo, Okt 09, 2005 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, genau das. Btw reichen 4 Vertices per Rect.
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)
 

ZhangHe2

BeitragSo, Okt 09, 2005 13:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn sowas geht solltest du das tun.Musst halt gucken ob die Oberflächzuviele Vertices hat , dann machst du halt
if vertices=zuviele then addvertex(surface2)

BtbN

BeitragSo, Okt 09, 2005 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, hab das ma ausgestetst:
Ein Sourface kann genau ein Short(65536) Vertices beherbergen, dann brichts zusammen. Also erstelle ich, wenn die Vertex-Zahl über 65500 kommt, schlicht nen neues Sourface, jetzt gehts wunderbar, thx!

Ps.: Ja, habs auch gemerkt, das nen Würfel nur 4 Vertices braucht ^^
 

Darren

BeitragSo, Okt 09, 2005 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
nen würfel braucht aber doch 8 oder nicht?
MFG Darren
 

ZhangHe2

BeitragSo, Okt 09, 2005 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
er meint wohl ein rect

BtbN

BeitragSo, Okt 09, 2005 16:33
Antworten mit Zitat
Benutzer-Profile anzeigen
jo, rect

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group