8
Positionierung und Ausrichtung der Kamera

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

Embed Size (px)

Citation preview

Page 1: 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

Positionierung und Ausrichtung der Kamera

Page 2: 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
Page 3: 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
Page 4: 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

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.

Page 5: 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
Page 6: 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

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

}

Page 7: 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
Page 8: 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

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}