Kollision zwischen Kamera und Terrain
Übersicht

davinchosBetreff: Kollision zwischen Kamera und Terrain |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Meine Frage ist eigentlich eine Anfängerfrage, allerdings ist sie speziell für Blitz3D, weshalb ich sie hier stelle- ich hoffe ihr verzeiht ![]() Also ich hab eine Heightmap als terrain geladen, über welche ich mit der camera fliegen kann. Nun soll die Kamera aber nicht durch Berge fliegen, sondern wie in der "Realität" davor stehenblieben. Ich weiss nun nicht, wie ich dies anstellen kann, da ich mich mit etwaigen Kollisionsabfragen so gut wie nicht auskenne.. hier der Code: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() terrain=LoadTerrain("heightmap.bmp") text1=LoadTexture ("gras1.bmp") WireFrame 0 EntityTexture terrain,text1,0,0 ScaleEntity terrain,20,750,20 ScaleTexture text1,20,20 cam=CreateCamera() MoveEntity cam,10,1000,10 CameraFogMode cam,1 CameraRange cam,1,5000 CameraFogRange cam,1,2000 CameraFogColor cam,0,50,250 CameraClsColor cam,0,50,250 light=CreateLight() TurnEntity light,90,45,0 While Not KeyHit(1) RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 MoveMouse 400,300 If KeyDown (200) Then MoveEntity cam,0,0,1.5 If KeyDown (208) Then MoveEntity cam,0,0,-1.5 If KeyDown (203) Then MoveEntity cam,-1.5,0,0 If KeyDown (205) Then MoveEntity cam,1.5,0,0 If MouseDown (1) Then MoveEntity cam, 0,1.5,0 If MouseDown (2) Then MoveEntity cam, 0,-1.5,0 RenderWorld Flip Wend ClearWorld End Ich hoffe wirklich, ihr könnt mir helfen!! Vielen Dank schon mal im Vorraus, Davinchos |
||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
www.blitzbase.de ![]() du musst der kamera und dem terrain einen kollisionstyp zuweisen siehe "entitytyp", und anschliessend mit "collisions" die beiden typen einander bekanntmachen. zusätzlich kannst du für sphere oder box collisionen noch den radius bzw. die box-grösse angeben. siehe EntityRadius bzw.: EntityBox. der rest läuft quasi von alleine. |
||
Denken hilft! |
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
so könntest du es zum Beispiel machen: PositionEntity cam , EntityX(cam), ( TerrainY(terrain, EntityX(cam) ), EntityY(cam), EntityZ(cam))+15, EntityZ(cam) Aber an deiner Stelle würde ich mir die Samples anschauen und in der Onlinehilfe EntityType() und Collisions() auschecken... ![]() |
||
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
okay, hab die befehle eingesetz, allerdings funktioniert es nicht...
Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() terrain=LoadTerrain("heightmap.bmp") text1=LoadTexture ("gras1.bmp") WireFrame 0 EntityTexture terrain,text1,0,0 ScaleEntity terrain,20,750,20 ScaleTexture text1,20,20 cam=CreateCamera() MoveEntity cam,10,1000,10 CameraFogMode cam,1 CameraRange cam,1,5000 CameraFogRange cam,1,2000 CameraFogColor cam,0,50,250 CameraClsColor cam,0,50,250 EntityType cam,1 EntityType terrain, 2 light=CreateLight() TurnEntity light,90,45,0 While Not KeyHit(1) RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 MoveMouse 400,300 If KeyDown (200) Then MoveEntity cam,0,0,1.5 If KeyDown (208) Then MoveEntity cam,0,0,-1.5 If KeyDown (203) Then MoveEntity cam,-1.5,0,0 If KeyDown (205) Then MoveEntity cam,1.5,0,0 If MouseDown (1) Then MoveEntity cam, 0,1.5,0 If MouseDown (2) Then MoveEntity cam, 0,-1.5,0 Collisions 1,2,2,1 RenderWorld Flip Wend ClearWorld End |
||
![]() |
Rone |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm,
vieleicht funktioniert collisions() nicht mit Terrains ?! keine Ahnung, Kenn mich auch nich wirklich mit Blitz3d aus, aber eigentlich musst du ja nur darauf achten dass die Kamera nicht unters terrain kommt: Code: [AUSKLAPPEN] Graphics3D 800,600,32,2
SetBuffer BackBuffer() terrain=LoadTerrain("environ/heightmap_256.bmp") text1=LoadTexture ("environ/terrain-1.jpg") EntityTexture terrain,text1,0,0 ScaleEntity terrain,20,750,20 ScaleTexture text1,20,20 cam=CreateCamera() light=CreateLight() TurnEntity light,90,45,0 PositionEntity cam ,EntityX(cam),TerrainY# (terrain, EntityX(cam), EntityY(cam), EntityZ(cam))+45,EntityZ(cam) While Not KeyHit(1) RotateEntity cam,EntityPitch(cam)+MouseYSpeed(),EntityYaw(cam)-MouseXSpeed(),0 ;PositionEntity cam ,EntityX(cam),TerrainY# (terrain, EntityX(cam), EntityY(cam), EntityZ(cam))+15,EntityZ(cam) ;PositionEntity cam ,EntityX(cam),EntityY(cam)-1, EntityZ(cam) If EntityY(cam) <= TerrainY# (terrain, EntityX(cam), EntityY(cam), EntityZ(cam))+15 Then PositionEntity cam ,EntityX(cam),TerrainY# (terrain, EntityX(cam), EntityY(cam), EntityZ(cam))+15,EntityZ(cam) EndIf MoveMouse 400,300 If KeyDown (200) Then MoveEntity cam,0,0,2 If KeyDown (208) Then MoveEntity cam,0,0,-2 If KeyDown (203) Then MoveEntity cam,-2,0,0 If KeyDown (205) Then MoveEntity cam,2,0,0 If MouseDown (1) Then MoveEntity cam, 0,2,0 If MouseDown (2) Then MoveEntity cam, 0,-2,0 RenderWorld Flip Wend ClearWorld End ![]() |
||
davinchos |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hey, dein Code scheint zu funktionieren! Ich danke dir vielmals bizar98!!!!
Jetzt muss ich nurnoch selbigen verstehen aber ich denke das sollte zu schaffen sein.. Nochmals danke! ![]() |
||
![]() |
stfighter01 |
![]() Antworten mit Zitat ![]() |
---|---|---|
collision auf terrain sollte aber auch funktionieren.
versuch noch entityradius cam, 1 und nimm das collisions aus der schleife heraus, das musst du nur einmal definieren. damit bist du auf jeden fall viel flexibler und du kannst deine kenntnisse auch auf andere objekte anwenden ![]() |
||
Denken hilft! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group