Ogre 에서 제공하는 ExampleFrameListener 와 ExampleApplication 객체를 상속받지 않고 GUI를 추가할때 생기는 문제중, 마우스가 특정영역에 갇히는 경우가 있습니다.
ogre 어플리케이션위자드로 생성하거나, 기존의 example 코드를 상속받아서 할때는 잘되지만, 상속받지 않을때는 안되는 이유는 ExampleFrameListener 의 한 부분을 보면 알수 있었습니다.
//Adjust mouse clipping area
virtual void windowResized(RenderWindow* rw)
{
unsigned int width, height, depth;
int left, top;
rw->getMetrics(width, height, depth, left, top);
const OIS::MouseState &ms = mMouse->getMouseState();
ms.width = width;
ms.height = height;
}
함수의 내용을 살펴보면 알수 있듯이, 마우스가 활동할 영역을 지정해주는 부분입니다.
프레임리스너를 생성할때 windowResized() 함수를 호출하면서 파라미터로 렌더윈도우 객체의 포인터를 넘겨줍니다.
windowResized(mWindow);
이렇게 하시면 기존에 갇혀있던 영역에서 벗어나, 지정해준 윈도우의 크기만큼 마우스의 활동영역이 지정되고, 잘 움직이게 됩니다.