Upload
tabea-abele
View
102
Download
0
Embed Size (px)
Citation preview
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
s = D3DXVECTOR3( -v.z, 0, v.x); s wird berechnet durch 90° Drehung von 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) berechnenD3DXVec3Normalize( &blick, &blick); Blickwinkelvektor normalisierenif( 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 berechnetD3DXMatrixRotationAxis( &dreh, &normale, hoch); Drehmatrix (dreh) wird berechnet.
D3DXVec3TransformNormal( &blick, &blick, &dreh); Drehmatrix wird auf Blickwinkelvektor angewendetD3DXMatrixRotationY( &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}