CreateMesh() und Terrain

Anfängerfragen zum Programmieren mit PureBasic.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

CreateMesh() und Terrain

Beitrag 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
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag von Brügge »

weiß hier niemand, wie man selber ein mesh erstellenkann, mit hilfe von SetMeshData()?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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
my pb stuff..
Bild..jedenfalls war das mal so.
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
super_castle
Beiträge: 557
Registriert: 29.11.2005 15:05

Beitrag 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
Brügge
Beiträge: 359
Registriert: 28.05.2006 16:40
Wohnort: Rheine

Beitrag 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?
xperience2003
Beiträge: 972
Registriert: 04.10.2004 18:42
Computerausstattung: Amiga, LinuxMint, Windows7
Wohnort: gotha
Kontaktdaten:

Beitrag 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
amiga rulez...
Rebirth Software
Antworten