Seite 1 von 2

Mesh in Terrain

Verfasst: 30.12.2006 15:23
von Programie
Hi,

Ich wollte heute mal anfangen ein kleines Spiel zu programmieren.
Ja jetzt die Frage, wie bekomme ich ein Mesh in einen Terrain rein?

Verfasst: 30.12.2006 19:19
von Kaeru Gaman
ganich

Verfasst: 31.12.2006 12:58
von dllfreak2001
doch du nimmst ein mesh und steckst es ins terrain.

Verfasst: 01.01.2007 16:28
von Kurono
<) *gruntz

Verfasst: 01.01.2007 16:38
von Kaeru Gaman
zur erklärung:
ein mesh ist eine sammlung von dreidimensionalen vektoren.
ein terrain baut auf ein zweidimensionales height-field auf.

Verfasst: 01.01.2007 17:00
von dllfreak2001
Ich denke Programmie möchte nen Mesh im terrain.
Also erstellt er nen Etity mit seinem gewünschten Mesh und platziert es im Terrain. Da gibbet auch nen Befehl in PB mit dem die Terrainhöhe an der Position herausfindet. Fertig mesh im terrain.

Ansonsten bastellt ers das Terrain selber als Mesh. Mit Milkshape geht das auch sehr einfach weil der auch mit Heightmaps arbeiten kann.
Allerdings wird es dann komplizierter ne einfache Kollision zu erzeugen.

Verfasst: 01.01.2007 21:02
von Programie
Kannst du mir mal einen Beispielcode reinschreiben?

(Das Terrain-Beispiel aus der Hilfe + Mesh?)

Verfasst: 02.01.2007 01:54
von dllfreak2001
Jap so gehts
Nimm ein Terrain und erstell dann nen Entity da ladest dann den Mesh rein. Wie im Beipielcode zum Mesh.
Und das Terrainheight() ist ja im Terrainbeipiel drin für die Kamera.


Leider habe ich grad keinen pb4 tauglichen code da aber die Beipiele beschreiben doch alles.
Spiel mal mit den Beispielen herum.

Verfasst: 03.01.2007 14:25
von Programie
Er muss zum verstehen ja nicht PB4 tauglich sein. Kannst du mir ein Beispiel für PB3.94 oder so posten?

PS: Frohes neues Jahr

Verfasst: 03.01.2007 15:02
von dllfreak2001
Nagut hab mal die Beispiele zusammen gepackt.

Ist auch PB4-Code und kannst den Kramm auch laufen lassen wenn du den Code im Exampleordner speicherst. (Der Example-Content muss vorhanden sein)

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Terrain
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

#CameraSpeed = 5

IncludeFile "Screen3DRequester.pb"

Define.f KeyX, KeyY, MouseX, MouseY

If InitEngine3D()
  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    LoadMesh   (0, "Robot.mesh");-Mesh laden
    
    AmbientColor(RGB(255,255,255))
    
    CreateMaterial  (0, LoadTexture(0, "Terrain_Texture.jpg"))
    AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1)
    CreateMaterial(2, LoadTexture(2, "r2skin.jpg")) ;-Material für Entity erstellen
    
    CreateTerrain("Terrain.png", MaterialID(0), 1, 1, 1, 4)
    
    CreateEntity(1, MeshID(0), MaterialID(2), 100,100,100) ;-Entity erstellen
    AnimateEntity(1, "Walk")
    
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0, 128, 25, 128)
    
    SkyDome("Clouds.jpg",10)
    ;-Entity X und Z position
    Global botx.f, botz.f
    botx = 300
    botz = 300
    Repeat
      Screen3DEvents()
            
      If ExamineKeyboard()
        
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = #CameraSpeed 
        Else
          KeyX = 0
        EndIf
                  
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = #CameraSpeed 
        Else
          KeyY = 0
        EndIf
        ;-Entity bewegen
        If KeyboardPushed(#PB_Key_A)
          botz - 1
        ElseIf KeyboardPushed(#PB_Key_D)
          botz + 1
        EndIf
        If KeyboardPushed(#PB_Key_W)
          botx + 1
        ElseIf KeyboardPushed(#PB_Key_S)
          botx - 1
        EndIf

      EndIf

      If ExamineMouse()
        MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2
        MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
      EndIf
      
      Height.f = TerrainHeight(CameraX(0), CameraZ(0))
      
      RotateCamera(0, MouseX, MouseY, RollZ)
      MoveCamera  (0, KeyX, -CameraY(0)+Height+8, KeyY)

      EntityLocate(1,botx,TerrainHeight(botx,botz),botz);-Entityposition festlegen  
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
  MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
  
End
An sich handelt es sich beim Terrain um einen Mesh der aber in Ogre nicht so gehandhabt werden kann. dafür kannst du dann mit Terrainheght einfach dein Entity platzieren.

In meinem Beispiel W S A D drücken um den Bot laufen zu lassen.
Das siehst du wie Terrainheight() funzt. Sieht sogar ziemlich realistisch aus mit der LAufanim.
Macht Bock nen Mechwrior-Klon zu basteln, oda?