Camera / Player = Pivot ----> Problem!

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Neoxit

Betreff: Camera / Player = Pivot ----> Problem!

BeitragDi, Mai 06, 2008 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo erstmal!

War lange zeit inaktiv was B3D angeht und wollte mich nun mal wieder dran versuchen.

Also gleich mal zum Problem.

Ich habe:

1 Pivot (PIVOT_PLAYER)
1 Mesh(MESH_PLAYER)
1 MesH(MESH_TERRAIN)
1 Cam (CAM_PLAYER)

Habe PIVOT_PLAYER und MESH_PLAYER auf das gleiche Feld gesetzt (y = 0 , x = 0 , z = 0)
CAM_PLAYER und MESH_PLAYER als Child dem PIVOT_PLAYER zugewiesen.
Dann die CAM_PLAYER versetzt hinter den MESH_PLAYER.
Dann die CAM_PLAYER um 15° nach unten Neigen lassen.
Dann die CAM_PLAYER um 50 Punkte nach oben gesetzt.

Klasse ich habe ein Third-Person-Cam.

Noch eine Bewegung mit den Tasten "W-A-S-D" und eine drehung mit "Q-E" erstellt. (für PIVOT_PLAYER)

"Juhuu alles läuft wie es soll..."

Nun die Kollision!

CONST COL_PLAYER = 1
CONST COL_TERRAIN = 2

Collisions COL_PLAYER, COL_TERRAIN, 1 ,2

Alles klar testen wir das doch mal...

Beweg mich und siehe da!
MESH_PLAYER kollidiert mit MESH_TERRAIN so wie es soll.... und die cam?

Die befindet sich immer noch da wo ich hingesteuert habe OHNE! zu kollidieren.
Habe auch versucht den PIVOT_PLAYER Kollidieren zu lassen... dann gehen aber Kugel und Cam durch...

Allerdings soll die CAM_PLAYER wenn der MESH_PLAYER kollidiert immer noch da bleiben wo MESH_PLAYER
zu finden ist.

Ich hoffe man versteht mich ... habe es mit


Code: [AUSKLAPPEN]
PositionEntity pivot_player,EntityX#(mesh_player),EntityY#(mesh_player),EntityZ#(mesh_player)


versucht. Dann bewegt sich nix mehr xD

Ich zeige euch mal den kompletten programmcode:

Code: [AUSKLAPPEN]
Graphics3D 800,600,32,2
SetBuffer BackBuffer()

AppTitle "Neoxit's 3D Programm"

Const COL_PIVOT_PLAYER   = 1
Const COL_TERRAIN       = 2

Global pivot_player = CreatePivot()
EntityType pivot_player,COL_PLAYER


Global mesh_player = LoadMesh("Meshes/kugel.3ds",pivot_player)      ;SpielerMesh Laden
EntityType mesh_player,COL_PIVOT_PLAYER

Global mesh_land   = LoadMesh("Meshes/terrain.3ds")               ;TerrainMesh Laden
EntityType mesh_land,COL_TERRAIN                           ;Kollisionsnummern Zuweisen

Global cam_playercam = CreateCamera(pivot_player)

Global mesh_skybox = MakeSkyBox("Data/skybox/sky")

;-----Settings----
CameraRange cam_playercam,1,10000         ;Cam Sichtweite setzen
CameraFogMode cam_playercam,1            ;Cam Nebel anmachen
CameraFogColor cam_playercam,150,150,150   ;Cam Farbe leicht grau
AmbientLight 255,255,255               ;Umgebungslicht Aktivieren
ScaleEntity mesh_player,0.1,0.1,0.1         ;Player verkleinern ::::
PositionEntity cam_playercam,0,25,-50      ;Cam Positionieren (hinter Spieler)
TurnEntity cam_playercam,15,0,0            ;Cam Drehen (15° nach unten)

Collisions COL_PIVOT_PLAYER,COL_TERRAIN,2,2
;============Hauptschleife============
Repeat
Cls


If KeyDown(17) Then MoveEntity pivot_player,0,0,5
If KeyDown(31) Then MoveEntity pivot_player,0,0,-5
If KeyDown(30) Then MoveEntity pivot_player,-5,0,0
If KeyDown(32) Then MoveEntity pivot_player,5,0,0
If KeyDown(16) Then TurnEntity pivot_player,0,2,0
If KeyDown(18) Then TurnEntity pivot_player,0,-2,0


;PositionEntity pivot_player,EntityX#(mesh_player),EntityY#(mesh_player),EntityZ#(mesh_player)

PositionEntity mesh_skybox,EntityX(pivot_player,1),EntityY(pivot_player,1),EntityZ(pivot_player,1) ;SkyBox Cameragleich positionieren ^^
UpdateWorld
RenderWorld


   Text 0,0,"Kollision(en):"
   For i=1 To col
      Text 000,i*20,"Entity="+CollisionEntity(pivot_player,i)
      Text 150,i*20,"Surface="+CollisionSurface(pivot_player,i)
      Text 300,i*20,"Triangle="+CollisionTriangle(pivot_player,i)
   Next



Flip
Until KeyHit(1) End










Function MakeSkyBox( file$ )

   m=CreateMesh()
   ;front face
   b=LoadBrush( file$+"_FR.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,-1,0,0:AddVertex s,+1,+1,-1,1,0
   AddVertex s,+1,-1,-1,1,1:AddVertex s,-1,-1,-1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;right face
   b=LoadBrush( file$+"_LF.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,+1,+1,-1,0,0:AddVertex s,+1,+1,+1,1,0
   AddVertex s,+1,-1,+1,1,1:AddVertex s,+1,-1,-1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;back face
   b=LoadBrush( file$+"_BK.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,+1,+1,+1,0,0:AddVertex s,-1,+1,+1,1,0
   AddVertex s,-1,-1,+1,1,1:AddVertex s,+1,-1,+1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;left face
   b=LoadBrush( file$+"_RT.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,+1,0,0:AddVertex s,-1,+1,-1,1,0
   AddVertex s,-1,-1,-1,1,1:AddVertex s,-1,-1,+1,0,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b
   ;top face
   b=LoadBrush( file$+"_UP.bmp",49 )
   s=CreateSurface( m,b )
   AddVertex s,-1,+1,+1,0,1:AddVertex s,+1,+1,+1,0,0
   AddVertex s,+1,+1,-1,1,0:AddVertex s,-1,+1,-1,1,1
   AddTriangle s,0,1,2:AddTriangle s,0,2,3
   FreeBrush b

   ScaleMesh m,100,100,100
   FlipMesh m
   EntityFX m,9
   EntityOrder m,10
   Return m
   
End Function



Ich hoffe mir kann jemand helfen.
Vllt. sind meine gecodeden lösungen auch gar nicht so klasse und man sollte es vllt. komplett anders machen?! Bitte um Hilfe!

Mit freundlichen Grüßen

euer Neoxit

Neoxit

Betreff: Ohh man xD

BeitragDi, Mai 06, 2008 1:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Also habs nu selber gelöst xD Man bin ich dumm xD

statt:

Global pivot_player = CreatePivot()
EntityType pivot_player,COL_PLAYER

einfach:

Global pivot_player = CreatePivot()
EntityType pivot_player,COL_PIVOT_PLAYER

Danke dennoch.

;D

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group