Up-Vector einer Kamera verändern
Übersicht

RobertRBetreff: Up-Vector einer Kamera verändern |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
gibt es eine Möglichkeit den Up-Vector der Camera zu ändern? Durch meine Maussteuerung, kann ich mich im Raum orientieren, dabei drehe ich mich mit der Kamera leider teilweise schief. Um dies zu vermeiden, wollte ich den up-vector immer wieder auf einen Standard-wert setzen. Hat da jemand einen Tipp? |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
UP-Vektor?
was meinst du damit, um welche achsen drehst du die cam? |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
RobertR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Damit meine ich die oben-Richtung der Kamera.
Ich drehe um x und y, damit ich mich in meiner Umgebung auch nach oben, unten, links und rechts orientieren kann. Da ich das mit der Maus steuere, stehe ich dann fast immer irgendwie schief im Raum und beim weiterlaufen wird einem schlecht ![]() |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
1. Mögligkeit: ![]() Code: [AUSKLAPPEN] Rotateentity cam,entitypitch(cam),entityyaw(cam),0 2. Möglichkeit: ![]() So müsste die Camerasteuerung gehen: Code: [AUSKLAPPEN] rotateentity cam,entitypitch(cam)+mouseyspeed()*0.2,entityyaw(cam)-mousexspeed()*0.2,0 |
||
RobertR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mmmh, wäre schon möglich:
also ich mache: Code: [AUSKLAPPEN] ;change view direction
und das klappt eigentlich gut.
TurnEntity camera, MouseYSpeed(), -MouseXSpeed(),0 mit deinem Code ändert sich leider nichts Grundlegendes. Das Problem der Schiefstellung besteht dann immer noch. Hast du noch eine andere Idee?? |
||
![]() |
Fuchsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Seltsam, denn bei "Rotateentity" ist das Problem bei mir nie aufgetreten, bei "Turnentity" hingegen schon.
Ich mach es normalerweise immer so: Code: [AUSKLAPPEN] ; Camera wird über dem Player positioniert. PositionEntity c_cam,EntityX(p_player),EntityY(p_player +c_dif#,EntityZ(p_player) ;Player wird gedreht RotateEntity p_player,0,EntityYaw(p_player)-MouseXSpeed()*0.2,0 ; Camera wird gedreht RotateEntity c_cam,EntityPitch(c_cam)+MouseYSpeed( *0.2,EntityYaw(p_player),0 MoveMouse g_breite/2,g_hoehe/2 ; Damit die Cameranicht ruckelt, wenn sie zu schräg ist. If EntityPitch(c_cam)>85 Then RotateEntity c_cam,85,EntityYaw(c_cam),0 If EntityPitch(c_cam)<-85 Then RotateEntity c_cam,-85,EntityYaw(c_cam),0 |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eine Frage: Du machst nicht eventuell den Fehler und lässt Pitch im Bereich von +- ~90 zu? Denn dieser Winkel ist mit Eulerwinkel explizit "verboten" wenn man nicht ziemlich üble Rotationsprobleme bekommen will (in dem Bereich ist das Tupel der 3 Rotationswinkel nicht mehr eindeutig)
Etwas was häufig auch Probleme macht, solltest du das nutzen, ist vor allem PointEntity ... Ein kleiner lauffähiger Code der dein genaues Problem und Setup aufzeigt, wäre von daher nicht schlecht. Ansonsten wäre die einzige Möglichkeit, nach dem rum-turnen jeweils noch ein RotateEntity zu machen bei welchem du den Rollwinkel wieder auf 0 setzt und Yaw wie vorher gezeigt, in den erlaubten Bereich zurück verfrachtet. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
RobertR |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hi,
hier ist noch mal mein Code so wie er jetzt ist! Vielleicht hätte ich noch erwähnen sollen, dass die Bewegung innerhalb einer Kugel stattfindet, also nicht auf einer Ebene. Deshalb wollte ich eigentlich den UpVector einfach immer in Richtung Mittelpunkt der Kugel setzen, somit wäre eine Korrekte Ausrichtung an jeder Position auf der Kugelinnenseite gegeben. Code: [AUSKLAPPEN] Graphics3D 800,600,32,2 SetBuffer BackBuffer() ;--------- CONSTANTS ---------; globalRadius = 300 step_inc = 5 innerRadius = 50 camRadius = 10 ET_CAM = 1 ET_INNER_SPHERE = 2 ET_GLOBAL_SPHERE_1 = 3 ET_GLOBAL_SPHERE_2 = 4 ;------------------------------; ;Camera camera=CreateCamera():Lis=CreateLight():Piv=CreatePivot() CameraClsColor camera,0,0,255:CameraRange camera,1,1000 PositionEntity camera,0,0,globalRadius-(0.5*camRadius) EntityType camera, ET_CAM EntityRadius camera, camRadius-8 ;Settings HidePointer Tex=CreateTexture(256,256):SetBuffer TextureBuffer(Tex) Color 120,120,120:Rect 0,0,256,256 For Z=0 To 15 Step 2:Color 160,160,160 Rect 0,Z*16,16,16:Next:Image=CreateImage(256,256):GrabImage Image,0,0 For Z=0 To 15 Step 2 DrawImage Image,Z*16,0 Next ;global Spheres globalSphere=CreateSphere(64) ScaleEntity globalSphere,globalRadius, globalRadius, globalRadius FlipMesh globalSphere EntityTexture globalSphere,Tex EntityType globalSphere,ET_GLOBAL_SPHERE_1 EntityRadius globalSphere, globalRadius globalInvisibleSphere = CreateSphere(64) ScaleEntity globalInvisibleSphere, globalRadius-2*camRadius, globalRadius-2*camRadius, globalRadius-2*camRadius EntityColor globalInvisibleSphere, 0,0,255 EntityType globalInvisibleSphere, ET_GLOBAL_SPHERE_2 EntityRadius globalInvisibleSphere, globalRadius-camRadius EntityAlpha globalInvisibleSphere, 0 SetBuffer BackBuffer() While Not KeyHit(1) ;change view direction TurnEntity camera, MouseYSpeed(), -MouseXSpeed(),0 ;reset cursor to center MoveMouse 400,300 ; Navigation If KeyDown(203) Then MoveEntity camera, -step_inc, 0, 0 If KeyDown(205) Then MoveEntity camera, step_inc, 0, 0 If KeyDown(200) Then MoveEntity camera, 0, 0, step_inc If KeyDown(208) Then MoveEntity camera, 0, 0, -step_inc Collisions ET_CAM,ET_GLOBAL_SPHERE_1,2,3 Collisions ET_CAM,ET_GLOBAL_SPHERE_2,2,3 UpdateWorld RenderWorld Flip Wend End |
||
![]() |
Nescio |
![]() Antworten mit Zitat ![]() |
---|---|---|
Würde dir das zur Maussteuerung helfen?
Code: [AUSKLAPPEN] Graphics3d 1024,768,0,1 Setbuffer Backbuffer() pivot=Createpivot() camera=Createcamera(pivot) Repeat MX#=MouseXSpeed()/5.0 MY#=-MouseYSpeed()/5.0 TurnEntity pivot,0,MX,0 Turnentity camera,MY,0,0 Cls Renderworld Flip MoveMouse 512,384 Until Keyhit(1) End Nur so als Denkansatz... |
||
Quod est faciendum? Nescio! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group