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?