3d Terrain
Übersicht

SchoaschBetreff: 3d Terrain |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey Leute ich bins mal wieder.
Ich habe gestern im Chat schon ein paar Hinweise bekommen wie ich das Problem mit dem Terrain, dass ich auf dem Terrain gehen kann, lösen kann. Es hat auch prima geklappt ich habe eine Heighmap geladen und mit TerrainY die Höhe abgefragt. Nun gibt es ein großes Problem. Wenn das Terrain nun mit einem Terrain Editor oder z.B. auch Blender erstellt wird, und darauf Objekte platziert werden, kann das ganze ja nicht als Heighmap abgespeichert werden, das heißt ich kann auch TerrainY nicht mehr benutzen. Welche möglichkeiten gäbe es da? Danke schonmal im Vorraus, mfg Schoasch |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Collisions![]() EntityCollided ![]() EntityRadius ![]() EntityType ![]() TranslateEntity ![]() Ein paar Befehle die dir nützlich sein könnten. ![]() Tipp: Bewege den Player nach unten. |
||
Schoasch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für deine schnelle Antwort!
Also ich habe das ganze mal Versucht und die Kollision funktioniert auch schon: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 SetBuffer BackBuffer() ;;;LoadTerrain Global terrain = LoadMesh("gfx\Test_terrain.3ds") PositionEntity terrain,0,0,0 ScaleEntity terrain,2,2,2 Global texture_grass = LoadTexture("gfx\Grass.png") EntityTexture terrain,texture_grass,0,2 RotateEntity terrain,-90,0,0 EntityType terrain,2 ;;;Camera Global cam = CreateCamera() PositionEntity cam,0,0,0 CameraRange cam,1,100000 EntityType cam,1 Repeat RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 If KeyDown(17) Then MoveEntity cam,0,0,1 If KeyDown(31) Then MoveEntity cam,0,0,-1 If col = 0 Then TranslateEntity cam,0,-1,0 Collisions 1,2,2,2 col = EntityCollided(cam,2) If KeyHit(57) Then jump = 1 If jump = 1 Then zaehler = zaehler + 1 MoveEntity cam,0,2,0 If zaehler > 15 Then jump = 0 zaehler = 0 EndIf EndIf MoveMouse 400,300 Flip UpdateWorld RenderWorld Until KeyHit(1) So zwei Probleme gibts jetzt noch. Wie kann ich jetzt die Camera nicht am Boden picken lassen sondern sie um 10 Einheiten nach oben verschieben? z.b. MoveEntity cam,0,10,0 - nur halt dass es da springen würde, was uns auch schon zum zweiten Problem bringt. Wenn ich mit der Camera richtung Himmel schaue und nach vorne gehe, dann hüpft die Kamera ganz wild auf und ab (weil sie ja normalerweise nach oben will aber durch TranslateEntity unten gehalten wird) Und wird das bei guten Spielen wirklich auch so gemacht? Gibt es da keine andere Lösung denn in dieser Art ala TerrainY? Danke schonmal im Vorraus, mfg Schoasch |
||
![]() |
Blackside |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstelle einfach ein kleinen Cube, und setze es als Parent von der Kamera. Dann kannst du die Kamera um ein paar Units Hochmachen(per Moveentity), damit es "menschlicher" aussieht und du nicht wie eine Ratte am Boden krabbelst ![]() Dann kannst du auch das andere Problem lösen, indem du nur die Kamera hoch und runter drehst, und den Cube nur nach links und rechts drehst(dann wird die Kamera, weil sie ja ein Parent von den Cube ist automatisch mit nach links und rechts gedreht). Und bewegen tust du dann auch den Würfel mit Moveentity anstatt der Kamera. |
||
Hier sollte eigentlich eine Signatur stehen! |
Schoasch |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke, funktioniert =)
Was mir gerade aufgefallen ist, wenn ich das ganze im Vollbildmodus starte, kann ich mich nicht mehr vernünftig umschaun. Wenn man sich drehen will, kommt es einem so vor als wäre es nur ein halber Frame pro Sekunde oder noch weniger aber wenn man nach vorne geht ist alles flüssig. Es hilft nichts wenn ich Flip 0 mache oder das FPS-Limit ganz hoch stelle. Die FPS gehen bei mir sogar bis zu 2500 rauf. Hier nochmal der derzeitige Code: Code: [AUSKLAPPEN] Graphics3D 800,600,32,1 SetBuffer BackBuffer() AppTitle "Engine" ;;;Globals Global jump,zaehler,A1,A2,A3,FPS_C,FPS,ms ;;;LoadTerrain Global terrain = LoadMesh("gfx\Test_terrain.3ds") PositionEntity terrain,0,0,0 ScaleEntity terrain,2,2,2 Global texture_grass = LoadTexture("gfx\Grass.png") ScaleTexture texture_grass,0.5,0.5 EntityTexture terrain,texture_grass,0,2 RotateEntity terrain,-90,0,0 EntityType terrain,2 ;;;Camera Global cam = CreateCamera() PositionEntity cam,0,10,0 CameraRange cam,1,100000 ;;;CameraParent Global camparent = CreateCube() PositionEntity camparent,0,0,1 EntityParent cam,camparent,1 EntityType camparent,1 ;;;Light Light1 = CreateLight() PointEntity Light1,terrain ;;;Timer Global FPS_timer = CreateTimer (60) ;;;Skybox ;;;Loop Repeat UpdatePlayer() GetFPS() MoveMouse 400,300 Flip UpdateWorld() RenderWorld() Until KeyHit(1) Function UpdatePlayer() ;;;Rotate and Move RotateEntity camparent,0,EntityYaw(camparent)-MouseXSpeed(),0 RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam),0 If KeyDown(17) Then MoveEntity camparent,0,0,1 If KeyDown(31) Then MoveEntity camparent,0,0,-1 Collisions 1,2,2,2 col = EntityCollided(camparent,2) TranslateEntity camparent,0,-2,0 ;Schwerkraft ;;;Jump If KeyHit(57) And col > 0 Then jump = 1 If jump = 1 Then zaehler = zaehler + 1 MoveEntity camparent,0,3,0 If zaehler > 20 Then jump = 0 zaehler = 0 EndIf EndIf End Function Function GetFPS() WaitTimer(Fps_Timer) FPS_C = FPS_C + 1 If ms<MilliSecs() Then ms = MilliSecs() + 1000 FPS = FPS_C FPS_C = 0 EndIf Text 0,0,"FPS: " + FPS End Function Jemand ne Ahnung woran das liegt? Hab das vorige Programm mit der Heighmap auch getestet, da ist genau das selbe ![]() ![]() Weis vlt. jemand woran das liegen könnte? Danke schon mal im Vorraus mfg Schoasch Edit: Keine Ahnung warum, aber ich habe diese beide Befehle : RotateEntity camparent,0,EntityYaw(camparent)-MouseXSpeed(),0 RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam),0 in eine eigene Funktion gegeben und jetzt funktionierts.... Komisch |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group