[MOgre] 마우스 픽킹 테스트, 객체 선택 (펌)
Ogre/MOgre 2009. 3. 13. 03:08 |
윈폼에서 3D 뷰에서 객체를 선택하는 로직이다.
아무래도 바운딩 박스 구조로 선택이 되는거 같다.
void mogrepanel_MouseDown(object sender, MouseEventArgs e)
{
mLMBDown = true;
mLastPosition = e.Location;
// 히트 테스트
mogreWin.ClickedOnHead(e.X, e.Y);
}
.....
public bool ClickedOnHead(int mx, int my)
{
float scrx = (float)mx / viewport.ActualWidth;
float scry = (float)my / viewport.ActualHeight;
Ray ray = camera.GetCameraToViewportRay(scrx, scry);
RaySceneQuery query = sceneMgr.CreateRayQuery(ray);
RaySceneQueryResult results = query.Execute();
boxsceneNode.ShowBoundingBox = false;
sceneNode.ShowBoundingBox = false;
foreach (RaySceneQueryResultEntry entry in results)
{
if (entry.movable.Name == "ogre")
{
//boxsceneNode.ShowBoundingBox = false;
sceneNode.ShowBoundingBox = true;
}
else if (entry.movable.Name == "box")
{
//sceneNode.ShowBoundingBox = false;
boxsceneNode.ShowBoundingBox = true;
}
// 위의 entry.movable.Name 를 사용해서 적당하게 처리 하면 될듯 하다.
}
return results.Count > 0;
}