Code:
void pick()
{
D3DXVECTOR3 v;
D3DXMATRIX matProjection;
D3DXMATRIX matView;
D3DXMATRIX matWorld;
D3DVIEWPORT9 d3dviewport;
static POINT point;
char buffer[64];
DWORD written;
GetCursorPos(&point);
HWND GetWindowFromMousePostion = WindowFromPoint(point);
d3ddev->GetTransform(D3DTS_PROJECTION , &matProjection);
d3ddev->GetViewport(&d3dviewport);
sprintf(buffer,"%s %d\n", "d3dviewport.Height" , d3dviewport.Height );
WriteConsole(Console , buffer , strlen(buffer) , &written , NULL);
sprintf(buffer,"%s %d\n", "d3dviewport.Width" , d3dviewport.Width );
WriteConsole(Console , buffer , strlen(buffer) , &written , NULL);
v.x = ( ( ( 2.0f * point.x ) / d3dviewport.Height ) - 1 ) / matProjection._11;
v.y = -( ( ( 2.0f * point.y ) / d3dviewport.Width ) - 1 ) / matProjection._22;
v.z = 1.0f;
//sprintf(buffer,"%s %f %s %f \n" , "v.x" , v.x , "v.y" , v.y);
//WriteConsole(Console , buffer , strlen(buffer) , &written , NULL);
D3DXMATRIX m;
D3DXVECTOR3 rayOrigin,rayDir;
d3ddev->GetTransform(D3DTS_VIEW, &matView);
D3DXMatrixInverse(&m, NULL, &matView);
// Transform the screen space pick ray into 3D space
rayDir.x = v.x*m._11 + v.y*m._21 + v.z*m._31;
rayDir.y = v.x*m._12 + v.y*m._22 + v.z*m._32;
rayDir.z = v.x*m._13 + v.y*m._23 + v.z*m._33;
rayOrigin.x = m._41;
rayOrigin.y = m._42;
rayOrigin.z = m._43;
// Use inverse of matrix
D3DXMATRIX matInverse;
D3DXMatrixInverse(&matInverse,NULL,&matWorld);
d3ddev->GetTransform(D3DTS_WORLD , &matWorld);
// Transform ray origin and direction by inv matrix
D3DXVECTOR3 rayObjOrigin,rayObjDirection;
D3DXVec3TransformCoord(&rayObjOrigin,&rayOrigin,&matInverse);
D3DXVec3TransformNormal(&rayObjDirection,&rayDir,&matInverse);
D3DXVec3Normalize(&rayObjDirection,&rayObjDirection);
BOOL ha........;
float distanceToCollision;
D3DXIntersect(meshTeapot, &rayObjOrigin, &rayObjDirection, &ha........, NULL, NULL, NULL, &distanceToCollision, NULL, NULL);
if(ha........) //this is hhasHHit , i think the forum is seeing this word as s.h.i.t lol
{
sprintf(buffer,"%s\n" , "intersecting");
WriteConsole(Console , buffer , strlen(buffer) , &written , NULL);
}
else
{
sprintf(buffer,"%s\n" , "not intersecting");
//WriteConsole(Console , buffer , strlen(buffer) , &written , NULL);
}
}