Up-Vector einer Kamera verändern

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

RobertR

Betreff: Up-Vector einer Kamera verändern

BeitragSa, Jun 10, 2006 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jun 10, 2006 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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
Twitter
 

RobertR

BeitragSa, Jun 10, 2006 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink

Fuchsi

BeitragSa, Jun 10, 2006 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Mögligkeit: Arrow In jedem Schleifendurchlauf:

Code: [AUSKLAPPEN]

Rotateentity cam,entitypitch(cam),entityyaw(cam),0




2. Möglichkeit: Arrow Meiner Meinung nach drehst du die Camera falsch.
So müsste die Camerasteuerung gehen:

Code: [AUSKLAPPEN]

rotateentity cam,entitypitch(cam)+mouseyspeed()*0.2,entityyaw(cam)-mousexspeed()*0.2,0
 

RobertR

BeitragSa, Jun 10, 2006 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Mmmh, wäre schon möglich:

also ich mache: Code: [AUSKLAPPEN]
;change view direction
TurnEntity camera, MouseYSpeed(), -MouseXSpeed(),0
und das klappt eigentlich gut.

mit deinem Code ändert sich leider nichts Grundlegendes. Das Problem der Schiefstellung besteht dann immer noch.
Hast du noch eine andere Idee??

Fuchsi

BeitragSo, Jun 11, 2006 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jun 11, 2006 16:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jun 11, 2006 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jun 11, 2006 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group