Exemple #1
0
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;
	}
}
Exemple #2
0
Geometry::SRT toSRT(const btTransform& t){
	return Geometry::SRT(toVec3(t.getOrigin()), toMatrix3x3(t.getBasis()),1.0);
}