Advertisement
expired6978

Pick Func

Nov 12th, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. void CDXScene::Pick(int x, int y, CDXMesh * mesh, CDXPicker & picker)
  2. {
  3. CDXVec3 vPickRayDir;
  4. CDXVec3 vPickRayOrig;
  5.  
  6. const CDXMatrix* pmatProj = g_Camera.GetProjMatrix();
  7.  
  8. // Compute the vector of the pick ray in screen space
  9. CDXVec3 v;
  10. v.x = (((2.0f * x) / g_Camera.GetWidth()) - 1) / pmatProj->_11;
  11. v.y = -(((2.0f * y) / g_Camera.GetHeight()) - 1) / pmatProj->_22;
  12. v.z = 1.0f;
  13.  
  14. // Get the inverse view matrix
  15. const CDXMatrix matView = *g_Camera.GetViewMatrix();
  16. const CDXMatrix matWorld = *g_Camera.GetWorldMatrix();
  17. CDXMatrix mWorldView = matWorld * matView;
  18. CDXMatrix m;
  19. D3DXMatrixInverse( &m, NULL, &mWorldView );
  20.  
  21. // Transform the screen space pick ray into 3D space
  22. vPickRayDir.x = v.x * m._11 + v.y * m._21 + v.z * m._31;
  23. vPickRayDir.y = v.x * m._12 + v.y * m._22 + v.z * m._32;
  24. vPickRayDir.z = v.x * m._13 + v.y * m._23 + v.z * m._33;
  25. vPickRayOrig.x = m._41;
  26. vPickRayOrig.y = m._42;
  27. vPickRayOrig.z = m._43;
  28.  
  29. // Run pick on given mesh
  30. mesh->Pick(vPickRayOrig, vPickRayDir, picker, false);
  31.  
  32. if (picker.Mirror()) {
  33. vPickRayDir.x = -vPickRayDir.x;
  34. vPickRayOrig.x = -vPickRayOrig.x;
  35.  
  36. mesh->Pick(vPickRayOrig, vPickRayDir, picker, true);
  37. }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement