본문 바로가기

OGRE 엔진활용

[Ogre] GUI 추가시 마우스 갇히는 현상

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);

이렇게 하시면 기존에 갇혀있던 영역에서 벗어나, 지정해준 윈도우의 크기만큼 마우스의 활동영역이 지정되고, 잘 움직이게 됩니다.