Seite 1 von 2

CreateMesh() und Terrain

Verfasst: 04.11.2007 22:43
von Brügge
Hi

ich möchte ein Terrain mit Schatten erstellen...
bei dem normalen standart CreateTerrain befehl geht das leider nicht.

ich habe mir das so vorgestellt:

ich habe einen Array von n*n. der Arrayindex sind die höhen und tiefen des Terrains.

jetzt möchte ich mir ein mesh erstellen mit hilfe von CreateMesh und seine punkte als Gitter anordnen und in höhe des Arrayindexes speicher, sodass das mesh zum terrain wird.


jetzt mein problem:
ich weiß nicht wie man die Befehle CreateMesh und co nutzt.

könnte mir jemand entweder ein tut für 3dMesh-erstellung geben

oder mir dieses kleine Programm schreiben, damit ich mir das mal angucken kann?

Vielen Dank! Bruegge

Verfasst: 05.11.2007 20:50
von Brügge
weiß hier niemand, wie man selber ein mesh erstellenkann, mit hilfe von SetMeshData()?

Verfasst: 05.11.2007 21:11
von STARGÅTE
so hier :

Das habe ich in meinem Müll gefunden, weil ich eingesehen habe das es schwachsinnig ist ein Mash per Hand zu erstellen :


Hier das ergebnis : Raumschiff-Bild

Code: Alles auswählen

; *** Raumschiff ***

CreateMesh(1)
 SetMeshData(1, 0, ?Punkte   , 18)
 SetMeshData(1, 1, ?Dreiecke , 20)
 SetMeshData(1, 2, ?Texturen , 18)

CreateEntity(Nr, MeshID(1), CreateMaterial(0, LoadTexture(0, "tex3.jpg")))

DataSection

  Punkte:
  
    Data.f   -5,   0,  8
    Data.f   -2,  -3,  8
    Data.f    2,  -3,  8
    Data.f    5,   0,  8
    
    Data.f   -3,   0,  16
    Data.f    3,   0,  16
    
    Data.f   -5,   0,  8
    Data.f   -2,   6,  8
    Data.f    2,   6,  8
    Data.f    5,   0,  8
 
    Data.f   -5,   0,  -8
    Data.f   -2,  -3,  -8
    Data.f    2,  -3,  -8
    Data.f    5,   0,  -8

    Data.f   -5,   0,  -8
    Data.f   -2,   6,  -8
    Data.f    2,   6,  -8
    Data.f    5,   0,  -8

 
  Dreiecke:
 
    Data.w   0,  1,  4
    
    Data.w   1,  2,  5
    Data.w   5,  4,  1
    
    Data.w   2,  3,  5
    
    Data.w   9,  8,  5 
    
    Data.w   4,  5,  8
    Data.w   8,  7,  4
    
    Data.w   7,  6,  4
    
    Data.w  10, 11,  1 
    Data.w   1,  0, 10

    Data.w  11, 12,  2
    Data.w   2,  1, 11
 
    Data.w  12, 13,  3
    Data.w   3,  2, 12

    Data.w   6,  7, 15
    Data.w  15, 14,  6 
 
    Data.w   7,  8, 16
    Data.w  16, 15,  7

    Data.w   8,  9, 17
    Data.w  17, 16,  8

  Texturen:
     
    Data.f 0.00 , 0.25
    Data.f 0.33 , 0.25 
    Data.f 0.67 , 0.25 
    Data.f 1.00 , 0.25 
  
    Data.f 0.33 , 0.50 
    Data.f 0.67 , 0.50 
  
    Data.f 0.00 , 0.75
    Data.f 0.33 , 0.75 
    Data.f 0.66 , 0.75
    Data.f 1.00 , 0.75
  
    Data.f 0.00 , 0.00
    Data.f 0.33 , 0.00 
    Data.f 0.67 , 0.00 
    Data.f 1.00 , 0.00 

    Data.f 0.00 , 1.00
    Data.f 0.33 , 1.00 
    Data.f 0.67 , 1.00 
    Data.f 1.00 , 1.00 

  
EndDataSection

Verfasst: 05.11.2007 21:25
von Brügge
cool danke!!

ich werde mal gucken, was ich damit anfangen kann und das endergebnis hier im forum posten, denn ich glaube schon viele haben versucht ein terrain mit schatten zu erstellen

Verfasst: 05.11.2007 23:28
von #NULL
@STARGÅTE
danke für den code

@Brügge
Zaphod hat das auch mal ganz gut erklärt:
http://www.purebasic.fr/german/viewtopi ... ht=#173822

Verfasst: 06.11.2007 15:27
von Brügge
danke für die Beschreibung!

aber ich habe noch ein problem...

wie kann ich in der DataSection eine schleife bauen?

also ich möchte zum beispiel für das Terrain 100 * 100 punkte machen:

also müsste es doch so aussehen:

Code: Alles auswählen

DataSection
  punkte:
  for i = 0 to 99
    for j = 0 to 99
      Data.f   i,   5,  j
    next j
  next i
EndDataSection

Verfasst: 06.11.2007 17:46
von STARGÅTE
lasse von PB ein Include schreiben:
PB-Code hat geschrieben: CreateFile(1, "Data.dat"
  WriteStringN("DataSection"
  For i = 0 To 99 
    For j = 0 To 99 
      WriteStringN("Data.f "+Str(i)+", 5, "+Str(i)+""
    Next j 
  Next i 
  WriteStringN("EndDataSection"
CloseFile(1)
Denn das Terrain soll ja eh ein eigenes festes Mash sein

Verfasst: 06.11.2007 21:11
von super_castle
hallo, wenn es alles dreiecke sind, müsste es doch ein program geben welches diese erstellt. "blender "vielleicht?

wer kann hier mal tipps geben?

mfg

Verfasst: 06.11.2007 21:49
von Brügge
@super_castle habe das jetzt nicht verstanden wie du das meinst...



@Stargâte die Idee finde ich gut!! vielen dank!! aber wie kann ich die jetzt wieder einlesen?

Verfasst: 06.11.2007 21:52
von xperience2003
WriteStringN("Data.f "+Str(i)+", 5, "+Str(i)+"")
damit erhaeltst du meshdaten fuer eine glatte ebene aus 100x100 tiles,kein terrain

am besten du baust dir ein terrain mit nem modeller
oder schreibst dir nen importer fuer heightmapimages

einfache variante

Code: Alles auswählen

dim terra.l(size,size)
startdrawing(imageoutput(x))
for x= 0 to size-1
for y= 0 to size-1
col=point(x,y)
terra(x,y)=red(col)
next
next
stopdrawing()
dann hast die hoehen