GSI

'RaySceneQueryResultEntry'에 해당되는 글 1건

  1. 2009.03.13 [MOgre] 마우스 픽킹 테스트, 객체 선택 (펌)


윈폼에서 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;
}

Posted by gsi
: