Kollision zwischen Kamera und Terrain

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

davinchos

Betreff: Kollision zwischen Kamera und Terrain

BeitragMi, Mai 31, 2006 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Meine Frage ist eigentlich eine Anfängerfrage, allerdings ist sie speziell für Blitz3D, weshalb ich sie hier stelle- ich hoffe ihr verzeiht Cool

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

BeitragMi, Mai 31, 2006 13:01
Antworten mit Zitat
Benutzer-Profile anzeigen
www.blitzbase.de Wink

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

BeitragMi, Mai 31, 2006 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
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... Wink
 

davinchos

BeitragMi, Mai 31, 2006 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Mai 31, 2006 13:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Wink
 

davinchos

BeitragMi, Mai 31, 2006 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Very Happy

stfighter01

BeitragMi, Mai 31, 2006 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Denken hilft!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group