Ogre笔记(3)
FrameListener:
class Example25FrameListener : public Ogre::FrameListener // 帧监听
{
private:
Ogre::SceneNode* _node;
public:
Example25FrameListener(Ogre::SceneNode* node)
{
_node = node;
}
bool frameStarted(const Ogre::FrameEvent &evt) // 每一帧开始前所做的工作
{
_node->translate(Ogre::Vector3(0.1,0,0)); // 每帧移动0.1, 会因机器速度的不同而不同// _node->translate(Ogre::Vector3(10,0,0) * evt.timeSinceLastFrame); 每秒移动10, 不论什么机器
return true;
}
};
获得窗口句柄:
size_t windowHnd = 0;
std::stringstream windowHndStr;
win->getCustomAttribute("WINDOW", &windowHnd);
windowHndStr << windowHnd; // OIS所需的字符串流
创建参数列表:
OIS::ParamList pl;
pl.insert(std::make_pair(std::string("WINDOW"), windowHndStr.str()));
通过参数列表创建输入系统:
_man = OIS::InputManager::createInputSystem( pl );
_key = static_cast<OIS::Keyboard*>(_man->createInputObject( OIS::OISKeyboard, false )); // 建立键盘接口// _mouse = static_cast<OIS::Mouse*>(_man->createInputObject( OIS::OISMouse, false )); 建立鼠标接口
捕获键盘输入:
bool frameStarted(const Ogre::FrameEvent &evt)
{
_node->translate(Ogre::Vector3(10,0,0) * evt.timeSinceLastFrame);
_key->capture(); // 捕获键盘输入
if(_key->isKeyDown(OIS::KC_ESCAPE))
{
return false;
}
return true;
}
鼠标输入:
float rotX = _mouse->getMouseState().X.rel * evt.timeSinceLastFrame* -1;
float rotY = _mouse->getMouseState().Y.rel * evt.timeSinceLastFrame * -1;
// getMouseState().X.rel用来获取在X方向上鼠标相对上一帧移动的距离
图形模式:
if(_key->isKeyDown(OIS::KC_R)&& _timer.getMilliseconds() > 250) // _timer.getMilliseconds()设置计时器
{_timer.reset(); // 重置计时器
if(_PolyMode == PM_SOLID)
{
_PolyMode = Ogre::PolygonMode::PM_WIREFRAME; // 线框模式
}
else if(_PolyMode == PM_WIREFRAME)
{
_PolyMode = Ogre::PolygonMode::PM_POINTS; // 顶点模式
}
else if(_PolyMode == PM_POINTS)
{
_PolyMode = Ogre::PolygonMode::PM_SOLID; // 图形模式
}
_Cam->setPolygonMode(_PolyMode);
}
另一种控制按键响应的方法:
if(_key->isKeyDown(OIS::KC_R) && !_pressedBefore)
{
_pressedBefore = true;
if(_PolyMode == PM_SOLID)
{
_PolyMode = Ogre::PolygonMode::PM_WIREFRAME;
}
else if(_PolyMode == PM_WIREFRAME)
{
_PolyMode = Ogre::PolygonMode::PM_POINTS;
}
else if(_PolyMode == PM_POINTS)
{
_PolyMode = Ogre::PolygonMode::PM_SOLID;
}
_Cam->setPolygonMode(_PolyMode);
}
if(!_key->isKeyDown(OIS::KC_R))
{
_pressedBefore = false;
}
---------------------------------------------------------------------------
You got a dream
You gotta protect it
People can't do something themselves
They wanna tell you you can do it
If you want something
Go get it
You got a dream
You gotta protect it
People can't do something themselves
They wanna tell you you can do it
If you want something
Go get it