diff --git a/btgui/OpenGLWindow/GLInstancingRenderer.cpp b/btgui/OpenGLWindow/GLInstancingRenderer.cpp index d87d56738..773375554 100644 --- a/btgui/OpenGLWindow/GLInstancingRenderer.cpp +++ b/btgui/OpenGLWindow/GLInstancingRenderer.cpp @@ -101,6 +101,7 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData float m_mouseXpos; float m_mouseYpos; bool m_mouseInitialized; + int m_mouseButton; GLuint m_defaultTexturehandle; @@ -111,7 +112,8 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData m_cameraUp(0,1,0), m_azi(100.f),//135.f), m_ele(25.f), - m_mouseInitialized(false) + m_mouseInitialized(false), + m_mouseButton(0) { @@ -119,20 +121,50 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData void wheelCallback( float deltax, float deltay) { - if (btFabs(deltax)>btFabs(deltay)) - { - m_azi -= deltax*0.1; - + if (!m_mouseButton) + { + if (btFabs(deltax)>btFabs(deltay)) + { + m_azi -= deltax*0.1; + + } else + { + //m_cameraDistance -= deltay*0.1; + btVector3 fwd = m_cameraTargetPosition-m_cameraPosition; + fwd.normalize(); + m_cameraTargetPosition += fwd*deltay*0.1; + } } else - { - m_cameraDistance -= deltay*0.1; - - } - + { + if (btFabs(deltax)>btFabs(deltay)) + { + btVector3 fwd = m_cameraTargetPosition-m_cameraPosition; + btVector3 side = m_cameraUp.cross(fwd); + side.normalize(); + m_cameraTargetPosition += side * deltax*0.1; + + } else + { + m_cameraTargetPosition -= m_cameraUp * deltay*0.1; + + } + } } void mouseMoveCallback(float x, float y) { + if (m_mouseButton) + { + float xDelta = x-m_mouseXpos; + float yDelta = y-m_mouseYpos; +// if (btFabs(xDelta)>btFabs(yDelta)) +// { + m_azi += xDelta*0.1; +// } else +// { + m_ele += yDelta*0.1; +// } + } m_mouseXpos = x; m_mouseYpos = y; @@ -141,25 +173,14 @@ struct InternalDataRenderer : public GLInstanceRendererInternalData void mouseButtonCallback(int button, int state, float x, float y) { - if (m_mouseInitialized) - { - if (button) - { - float xDelta = x-m_mouseXpos; - float yDelta = y-m_mouseYpos; - - m_azi += xDelta*0.1; - m_ele += yDelta*0.1; - //printf("m_azi=%f\n",m_azi); - } - } + m_mouseButton=state; m_mouseXpos = x; m_mouseYpos = y; m_mouseInitialized = true; } void keyboardCallback(unsigned char key, int x, int y) { - // printf("world\n"); + printf("world\n"); } }; @@ -187,7 +208,7 @@ void btDefaultMouseMoveCallback( float x, float y) void btDefaultKeyboardCallback(int key, int state) { - //printf("world\n"); + printf("world2\n"); } diff --git a/btgui/OpenGLWindow/MacOpenGLWindow.mm b/btgui/OpenGLWindow/MacOpenGLWindow.mm index c4597bdb6..20501108a 100644 --- a/btgui/OpenGLWindow/MacOpenGLWindow.mm +++ b/btgui/OpenGLWindow/MacOpenGLWindow.mm @@ -890,7 +890,7 @@ void MacOpenGLWindow::startRendering() } - //if (!handledEvent) + if (!handledEvent) [m_internalData->m_myApp sendEvent:event]; [m_internalData->m_myApp updateWindows];