Kamera um den Player drehen - mit Mouselook
Übersicht

![]() |
MegamagBetreff: Kamera um den Player drehen - mit Mouselook |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Ich möchte folgendes. Man soll sich wie in einem Egoshooter mit der Maus umsehen können. Allerdings soll die Kamera um den Player rotieren, also immer hinter ihm bleiben. Eigentlich genauso wie hier: http://www.youtube.com/watch?v...re=related Ich habe schon folgenden Code: Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 1
SetBuffer BackBuffer() Global ms=20 Global cx# Global cy# Global player=CreateCube() PositionEntity player, 0, 0, -10 EntityRadius player,1.8 EntityType player,1 Global cam=CreateCamera() PositionEntity cam,EntityX(player),EntityY(player)+3,EntityZ(player) light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\Test.b3d") PositionEntity scene, 0, -5, 35 ;----------------------------------------------------------------------------; While Not KeyHit(1) mouse() PositionEntity cam,EntityX(player),EntityY(player)+3,EntityZ(player)-5 UpdateWorld RenderWorld Flip Wend End ;----------------------------------------------------------------------------; Function mouse() mxs=MouseXSpeed()*ms ;(20) mys=MouseYSpeed()*ms ;(20) cx#=EntityPitch(cam)+mys*0.01 cy#=EntityYaw(cam)-mxs*0.01 If cx#>89 Then cx#=89 If cx#<-89 Then cx#=-89 RotateEntity cam,cx,cy,0 RotateEntity player,EntityPitch(player),cy,0 MoveMouse 400,300 End Function Nur wie schaffe ich das jetzt, dass die Kamera so wie in dem Video reagiert? Und vorallem dann auch nicht in bzw. hinter den Wänden verschwindet? Danke, Blitz4D |
||
Krischan |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde einen Pivot erstellen, den Player und die Kamera da als Childs dranhängen und die Kamera auf Kollisionen mit der Scene prüfen (Kamera dann mit Positionentity cam,0,1,-5 oder so ein wenig dahintermoven). Du bewegst nur den Pivot - wobei das mit dem Part "Kamera soll nicht hinter Wänden verschwinden" nicht so trivial lösbar ist, da sollte man schon beim Bauen des Levels auf Engstellen achten oder eine sehr intelligente Funktion bauen, die aktiv wird, sobald die Kamera mit der Scene kollidiert. | ||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Kamera befindet sich im Abstand R vom Spieler, also gilt:
Dreamora hat Folgendes geschrieben: alpha = Rotationswinkel um Y-Achse also Rotation in der Grundebene
beta = Rotationswinkel bezüglich der Grundebene also XZ-Ebene X = OrigX + Radius * cos( alpha ) * cos( beta ) Y = OrigY + Radius * sin( beta ) Z = OrigZ + Radius * sin( alpha ) * cos( beta ) Siehe dazu hier, unten gibt es dazu noch einen Beispielcode. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das mit der Drehung:
Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() light=CreateLight():PositionEntity light, -500, 500, -500 scene =CreateSphere():ScaleEntity scene,-100,-100,-100 player=CreateCube():ScaleEntity player,1,.1,1 campiv=CreatePivot(player) cam = CreateCamera(campiv):MoveEntity cam, 0, 0, -5 While Not KeyHit(1) NP# = EntityPitch#(campiv)+MouseYSpeed() If NP# > 89 NP# = 89 If NP# < -89 NP# = -89 RotateEntity campiv,NP#,0,0 RotateEntity player,0,EntityYaw(player)-MouseXSpeed(),0 RenderWorld MoveMouse 400,300 Flip Wend Am code für das andere arbeite ich noch [Edit]Mist zu langsam |
||
Warbseite |
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
@CGamer:
Das sieht gut aus, aber der Player rotiert um die eigene Achse, wenn ich links und rechts die Maus benutze. Er soll aber die Richtung ändern. @Xeres: Tut mir echt leid, aber das verstehe ich nicht... |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie meinst du das mit der Reichtung ändern? | ||
Warbseite |
- Zuletzt bearbeitet von Xaymar am Mi, Dez 03, 2008 21:02, insgesamt einmal bearbeitet
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab's hinbekommen^^
Kann man zwar noch verbessern, aber immerhin: Code: [AUSKLAPPEN] Graphics3D 1024, 768, 32, 1
AppTitle "School Survival" SetBuffer BackBuffer() Global player=CreateCube() PositionEntity player, 0, 0, -10 EntityRadius player,1.8 EntityType player,1 Global cam=CreateCamera() PositionEntity cam,EntityX(player),EntityY(player)+3,EntityZ(player)-10 light = CreateLight(2) PositionEntity light, 0, 20, 0 LightRange light,35 scene = LoadMesh("data\Models\Test.b3d") PositionEntity scene, 0, -5, 35 ;----------------------------------------------------------------------------; While Not KeyHit(1) winkel=winkel-MouseXSpeed()/2 winkel2=winkel2-MouseYSpeed()/2 X# = 20 * Cos( winkel ) * Cos( winkel2 ) Y# = 20 * Sin( winkel2 ) Z #= 20 * Sin( winkel ) * Cos( winkel2 ) PositionEntity cam,x,y,z RotateEntity player,EntityPitch(player),winkel,EntityRoll(player) PointEntity cam,player MoveMouse 512,384 UpdateWorld RenderWorld Flip Wend End ;----------------------------------------------------------------------------; EDIT: Nochwas, wenn man jetzt mal dreht (macht die Maus mal nach rechts und links) dann dreht sich die Kamera ungleichmäßig. Wieso? |
||
![]() |
Xaymarehemals "Cgamer" |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich glaube ich habe jetzt verstanden wie du es meintest:
Code: [AUSKLAPPEN] Graphics3D 800,600,0,2
SetBuffer BackBuffer() light=CreateLight() PositionEntity light, 0, -2, 10 scene =CreateSphere():ScaleEntity scene,-100,-100,-100:EntityAlpha scene,.5 player=CreateCube():ScaleEntity player,1,.1,1:fp=CreateSphere(8,player):MoveEntity fp,0,0,1:ScaleEntity fp,1,10,1 campiv=CreatePivot() cam = CreateCamera(campiv):MoveEntity cam, 0, 0, -5 While Not KeyHit(1) NP# = EntityPitch#(campiv)+MouseYSpeed() If NP# > 89 NP# = 89 If NP# < -89 NP# = -89 RotateEntity campiv,NP#,EntityYaw(campiv)-MouseXSpeed(),0 PositionEntity campiv,EntityX(player),EntityY(player),EntityZ(player) If KeyDown(17) ;W Y1# = EntityYaw(campiv):Y2#=EntityYaw(player) rotdist# = Y1#-Y2# rotdist# = rotdist#/5 TurnEntity player, 0, rotdist#, 0 EndIf RenderWorld MoveMouse 400,300 Text 0,0,EntityYaw(player) Text 0,15,EntityYaw(campiv) Text 0,30,rotdist# Flip Wend mit w aligned sich der player der camera |
||
Warbseite |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group