void create_shadow_matrix(D3DXMATRIX* out, D3DXPLANE* plane, D3DXMATRIX* to_world)
{
// creates eine Shadow-Matrix, die ein Objekt auf eine Plane mappt
D3DXMATRIX shm;
// verschiebe die "Lichtquelle", also den SC
// sehr weit weg vom Objekt, so dass der Schatten wie bei einem direktionalen Licht wirkt.
// pos ist die SC- Position, die Position des Objektes wird aus dessen Matrix (to_world)
// errechnet.
D3DXVECTOR3 delta= pos - D3DXVECTOR3(to_world->_41, to_world->_42, to_world->_43);
D3DXVec3Normalize(&delta, &delta);
delta= pos + delta*MAX_DISTANCE;
D3DXVECTOR4 lightpos(delta.x, delta.y, delta.z, 1.0f);
D3DXMatrixShadow(&shm, &lightpos, plane);
D3DXMatrixMultiply(out, to_world, &shm);
}
|