void _X3DWorld::keyEvent(const _XInputEvent& inputEvent) { switch(inputEvent.type) { case EVENT_KEYBOARD: switch(inputEvent.keyState) { case KEY_STATE_UP: switch(inputEvent.keyValue) { case XKEY_UP: m_keyUpState = KEY_STATE_UP; break; case XKEY_DOWN: m_keyDownState = KEY_STATE_UP; break; case XKEY_A: m_keyAState = KEY_STATE_UP; break; case XKEY_D: m_keyDState = KEY_STATE_UP; break; case XKEY_W: m_keyWState = KEY_STATE_UP; break; case XKEY_S: m_keySState = KEY_STATE_UP; break; } break; case KEY_STATE_DOWN: switch(inputEvent.keyValue) { case XKEY_UP: m_keyUpState = KEY_STATE_DOWN; break; case XKEY_DOWN: m_keyDownState = KEY_STATE_DOWN;break; case XKEY_A: m_keyAState = KEY_STATE_DOWN; break; case XKEY_D: m_keyDState = KEY_STATE_DOWN; break; case XKEY_W: m_keyWState = KEY_STATE_DOWN; break; case XKEY_S: m_keySState = KEY_STATE_DOWN; break; } break; } break; case EVENT_MOUSE: switch(inputEvent.mouseState) { case MOUSE_MOVE: if(m_isMouseBtnDown) { if(m_targetObj != NULL) {//鼠标拖动 _XVector4 mouseRotate; m_mouseArcBall.drag(XEE::mousePosition,mouseRotate); m_mouseRotateMatrixN = m_mouseRotateMatrixO * toMatrix3x3(mouseRotate).anti(); m_targetObj->setMultRotate(_XMatrix4x4().getRotate(m_mouseRotateMatrixN)); } } break; case MOUSE_LEFT_BUTTON_DOWN: case MOUSE_RIGHT_BUTTON_DOWN: case MOUSE_MIDDLE_BUTTON_DOWN: m_isMouseBtnDown = true; m_mouseRotateMatrixO = m_mouseRotateMatrixN; m_mouseArcBall.click(XEE::mousePosition); break; case MOUSE_LEFT_BUTTON_UP: case MOUSE_RIGHT_BUTTON_UP: case MOUSE_MIDDLE_BUTTON_UP: m_isMouseBtnDown = false; break; } break; } }
Geometry::SRT toSRT(const btTransform& t){ return Geometry::SRT(toVec3(t.getOrigin()), toMatrix3x3(t.getBasis()),1.0); }