80 likes | 187 Views
Positionierung und Ausrichtung der Kamera. void balance::kamera_bewegen( float seit, float hoch, float vor) { D3DXVECTOR3 v, s, h, t; v = da_gucke_ich_hin - hier_bin_ich; Erzeugt den Blickrichtungsvektor (v) v.y = 0.0f; D3DXVec3Normalize( &v, &v); Normalisiert v
E N D
void balance::kamera_bewegen( float seit, float hoch, float vor) { D3DXVECTOR3 v, s, h, t; v = da_gucke_ich_hin - hier_bin_ich;Erzeugt den Blickrichtungsvektor (v) v.y = 0.0f; D3DXVec3Normalize( &v, &v);Normalisiert v s = D3DXVECTOR3( -v.z, 0, v.x);s wird berechnet durch 90° Drehungvon v, ist damit normalisiert h = D3DXVECTOR3( 0, 1, 0);h zeigt nach oben und hat die Länge 1 t = seit*s + hoch*h + vor*v;t wird aus 3 Verschiebefaktoren und 3Verschiebevektoren berechnet hier_bin_ich += t;wird um t verschoben da_gucke_ich_hin += t;wird um t verschoben } Achtung: +,- und * sind überladene Operatoren.
void balance::kamera_schwenken( float seit, float hoch) { D3DXVECTOR3 blick, normale; D3DXMATRIX dreh; blick = da_gucke_ich_hin - hier_bin_ich;Blickwinkelvektor (blick) berechnen D3DXVec3Normalize( &blick, &blick);Blickwinkelvektor normalisieren if( blick.x*blick.x + blick.z*blick.z < 0.005)Verhinderung des „Überkopfschwenks“ { if( ((blick.y > 0) && (hoch > 0)) || ((blick.y < 0) && (hoch < 0))) hoch = 0.0; } D3DXVec3Cross( &normale, &blick, &D3DXVECTOR3( 0.0f, 1.0f, 0.0f));Drehachse (norm) wird berechnet D3DXMatrixRotationAxis( &dreh, &normale, hoch);Drehmatrix (dreh) wird berechnet. D3DXVec3TransformNormal( &blick, &blick, &dreh);Drehmatrix wird auf Blickwinkelvektor angewendet D3DXMatrixRotationY( &dreh, seit);Drehung wird auf die Y-Achse angewendet. D3DXVec3TransformNormal( &blick, &blick, &dreh);Drehmatrix wird auf Blickwinkelvektor angewendet da_gucke_ich_hin = hier_bin_ich + blick;neuer Blickpunkt wird berechnet }
void balance::kamera_fahrt( float seit, float hoch, float speed) { D3DXVECTOR3 delta; kamera_schwenken( seit, hoch); delta = da_gucke_ich_hin-hier_bin_ich;Fahrtrichtungsvektor wird berechnet D3DXVec3Normalize( &delta, &delta); fahrgeschwindigkeit += speed;Änderung der Fahrtgeschwindigkeit delta = fahrgeschwindigkeit*delta;Fahrtvektor wir berechnet hier_bin_ich += delta;Standort wir angepasst da_gucke_ich_hin += delta;Blickpunkt wird angepasst }