C
ich hab ein bisschen gesucht und rumgebastelt. aber irgendwie ist es noch etwas ungenau.
D3DXVECTOR3 vec, rayOrigin,rayDir;
D3DXMATRIX matProj, matView, mVI;
d3ddev -> GetTransform(D3DTS_PROJECTION, &matProj);
d3ddev -> GetTransform(D3DTS_VIEW, &matView);
D3DXMatrixInverse( &mVI, NULL, &matView);
vec.x = ( ( ( 2.0f * mousedata.Xi ) / SCREEN_WIDTH ) - 1 ) / matProj._11;
vec.y = -( ( ( 2.0f * mousedata.Yi ) / SCREEN_HEIGHT ) - 1 ) / matProj._22;
vec.z = 1.0f;
// Transform the screen space pick ray into 3D space
rayDir.x = vec.x*mVI._11 + vec.y*mVI._21 + vec.z*mVI._31;
rayDir.y = vec.x*mVI._12 + vec.y*mVI._22 + vec.z*mVI._32;
rayDir.z = vec.x*mVI._13 + vec.y*mVI._23 + vec.z*mVI._33;
rayOrigin.x = mVI._41;
rayOrigin.y = mVI._42;
rayOrigin.z = mVI._43;
den Strahl pack ich dann in diese funktion für, abstand zwischen gerade und einem Punkt.
float lineP_distance(D3DXVECTOR3 origin, D3DXVECTOR3 dir, D3DXVECTOR3 point)
{
D3DXVECTOR3 cross;
D3DXVec3Cross(&cross, &dir, &(point-origin));
return (D3DXVec3Length(&cross)/D3DXVec3Length(&dir));
}
ich hab nur das problem das der strahl nicht direkt durch meine cursor spitze läuft. also je nach ort ein bisschen gestreut.
ist mein cursor falsch? oder hab ich einen fehler beim erstellen vom Ray?