dim in dim (gelöst)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

bjh

Betreff: dim in dim (gelöst)

BeitragMo, Okt 17, 2011 14:44
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

ich habe ein problem:

ich wollte mir eine map mit ganz simplen lod basteln.
dafür benutze ich einfach 10*10 terrainmeshes mit jeweils 20000 polygonen und 10*10 terrainmeshes mit jeweils 200 polygonen.
in der nähe des spieler werden dann die highpolymeshs angezeigt und die anderen werden gehidet und lowpolymeshs werden dann dort angezeigt.

ich hab aber keine ahnung, wie ich das mit dim lösen kann.
wenn ich nur eine map habe benutze ich einfach dim map(breite(vertexanzahl),länge(vertexanzahl)).
aber ich hab keine ahnung, wie ich 100 meshs und die dazugehörigen surfaces und vertexe, damit ich sie verändern kann, einbauen kann.

ich hoffe, jemand kann mir helfen Wink
  • Zuletzt bearbeitet von bjh am Mo, Okt 17, 2011 20:01, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragMo, Okt 17, 2011 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Types und Arrays und/oder Arrays und Types kombinieren würde ich sagen - Dim in Dim funktioniert nicht.
BlitzBasic: [AUSKLAPPEN]
Type TMeshTerrain
Field Mesh[2] ;* Blitzarrays - Konstante Größe
Field Surface[2]
End Type

Dim Terrains.TMeshTerrain(64,64)
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Jan_

Ehemaliger Admin

BeitragMo, Okt 17, 2011 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]

;Anfang
Dim map(width,height,2)

For x = 0 To width-1
For y=0 To height-1
map(x,y,0)=LoadMesh(lowpoly)
map(x,y,1)=LoadMesh(highpoly)
Next
Next

;Hauptschleife

For x = 0 To width-1
For y=0 To height-1
If Sqr((playerx-blockmittex)^2+(playery-blockmittey)^2) < 100 Then
ShowEntity map(x,y,1)
HideEntity map(x,y,0)
Else
HideEntity map(x,y,1)
ShowEntity map(x,y,0)
EndIf
Next
Next

between angels and insects
  • Zuletzt bearbeitet von Jan_ am Mo, Okt 17, 2011 16:17, insgesamt einmal bearbeitet
 

bjh

BeitragMo, Okt 17, 2011 15:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@Xeres ich werd mal ein bisschen damit rumprobieren, weil ich damit noch nie was gemacht hab.
vielleicht kannst du mir das auch genauer erklären, ich blick da nämlich nicht durch

Tankbuster

BeitragMo, Okt 17, 2011 16:03
Antworten mit Zitat
Benutzer-Profile anzeigen
map(width,height,0) sind die Lowpoly Meshes
map(width,height,1) sind die Highpoly Meshes
Die letzte Dimension wird also nur dafür benutzt, um die Lowpoly von den Highpolys unterscheiden zu können.

und sqr((playerx-blockmittex)^2+(playery-blockmittey)^2) ist einfach der Satz des Pythagoras . Der Sinn dahinter ist, dass abm einer bestimmten Entfernung die highpoly Meshes nichtmehr angezeigt werden, dafür aber die lowpoly Meshes.. und andersrum

Sonst müsste doch alles einleuchtend sein...
Twitter
Download Jewel Snake!
Windows|Android
 

bjh

BeitragMo, Okt 17, 2011 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ich erstelle meine map aber selber aus einer heightmap oder einer datei mit höheninformationen

und weil meine map noch veränderbar sein muss, sieht das bei einer map so aus:

dim map_dim(x,y)

map=createmesh()
map_surface=createsurface(map)

und mit dem dim-feld werden dann die vertexpunkte erstellt und verwaltet.

ich brauche also eine lösung, die mir 100 meshs oder sogar 200 meshs mit den zugehörigen vertexpunkten zusammenfasst.

hoffe, jetzt ist klar, was ich brauche Wink



ich könnte einen type mit blitzarrays machen:

BlitzBasic: [AUSKLAPPEN]
Type map
Field mesh,surface,x[100],y[100]
End Type


und dann habe ich 200 types (100 für lowpoly, 100 für highpoly) in denen ich alle informationen gespeichert habe

aber vllt gibts eine bessere lösung


ich habs jetzt so gelöst, falls das jemanden interessiert:

BlitzBasic: [AUSKLAPPEN]
timer=CreateTimer(60)
Graphics3D 0,0,32,1
SetBuffer BackBuffer()
AmbientLight 255,255,255

Type map1
Field m,s,v[10200]
End Type

Type map2
Field m,s,v[120]
End Type

map=LoadImage("map.jpg")
DrawImage map,0,0
LockBuffer

For yy=0 To 9
For xx=0 To 9
map2.map2=New map2
map2\m=CreateMesh()
PositionEntity map2\m,-4500+xx*1000,0,-4500+yy*1000
map2\s=CreateSurface(map2\m)
For y=0 To 10
For x=0 To 10
z=ReadPixelFast(x*10+xx*101-xx,y*10+yy*101-yy)
map2\v[x+y*11]=AddVertex(map2\s,-495+x*100,z And $FF,-495+y*100)
Next
Next
For y=0 To 9
For x=0 To 9
AddTriangle map2\s,map2\v[x+1+y*11],map2\v[x+y*11],map2\v[x+y*11+11]
AddTriangle map2\s,map2\v[x+1+y*11],map2\v[x+y*11+11],map2\v[x+y*11+12]
Next
Next
map1.map1=New map1
map1\m=CreateMesh()
PositionEntity map1\m,-4500+xx*1000,0,-4500+yy*1000
map1\s=CreateSurface(map1\m)
For y=0 To 100
For x=0 To 100
z=ReadPixelFast(x+xx*101-xx,y+yy*101-yy)
map1\v[x+y*101]=AddVertex(map1\s,-495+x*10,z And $FF,-495+y*10)
Next
Next
For y=0 To 99
For x=0 To 99
AddTriangle map1\s,map1\v[x+1+y*101],map1\v[x+y*101],map1\v[x+y*101+101]
AddTriangle map1\s,map1\v[x+1+y*101],map1\v[x+y*101+101],map1\v[x+y*101+102]
Next
Next
Next
Next

UnlockBuffer

cam=CreateCamera()
TurnEntity cam,0,0,0
MoveEntity cam,0,100,0
CameraRange cam,1,10000
WireFrame 1

While Not KeyHit(1)


UpdateWorld
RenderWorld

WaitTimer timer
Flip 0
Wend
End


man kann ein bild mit einer auflösung von 1001*1001 verwenden

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group