Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void CDXScene::Pick(int x, int y, CDXMesh * mesh, CDXPicker & picker)
- {
- CDXVec3 vPickRayDir;
- CDXVec3 vPickRayOrig;
- const CDXMatrix* pmatProj = g_Camera.GetProjMatrix();
- // Compute the vector of the pick ray in screen space
- CDXVec3 v;
- v.x = (((2.0f * x) / g_Camera.GetWidth()) - 1) / pmatProj->_11;
- v.y = -(((2.0f * y) / g_Camera.GetHeight()) - 1) / pmatProj->_22;
- v.z = 1.0f;
- // Get the inverse view matrix
- const CDXMatrix matView = *g_Camera.GetViewMatrix();
- const CDXMatrix matWorld = *g_Camera.GetWorldMatrix();
- CDXMatrix mWorldView = matWorld * matView;
- CDXMatrix m;
- D3DXMatrixInverse( &m, NULL, &mWorldView );
- // Transform the screen space pick ray into 3D space
- vPickRayDir.x = v.x * m._11 + v.y * m._21 + v.z * m._31;
- vPickRayDir.y = v.x * m._12 + v.y * m._22 + v.z * m._32;
- vPickRayDir.z = v.x * m._13 + v.y * m._23 + v.z * m._33;
- vPickRayOrig.x = m._41;
- vPickRayOrig.y = m._42;
- vPickRayOrig.z = m._43;
- // Run pick on given mesh
- mesh->Pick(vPickRayOrig, vPickRayDir, picker, false);
- if (picker.Mirror()) {
- vPickRayDir.x = -vPickRayDir.x;
- vPickRayOrig.x = -vPickRayOrig.x;
- mesh->Pick(vPickRayOrig, vPickRayDir, picker, true);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement