2009/02/18

cannot detect SHIFT key status while doing anything else

Other CubicVR viewers use SHIFT ket for zoom in and CTRL key for zoom out. However, I cannto find any ways to do this in OpenGL. If I push some other key or mouse button while pushing down SHIFT key, I can detect it by useing glutGetModifiers(). But, if I just push SHIFT key, no event detected by OpenGL even in glutIdleFunc(). glutSpecialFunc() doesn't detect SHIFT key. I found some people are asking the same question in web, but I couldn't find any good answere yet. If you know how I can detect SHIFT key event, please let me know.

普通のCubicVR Viewerでは、シフトキーを押すとズームイン、コントロールキーを押すとズームアウトなのですが、OpenGLでうまく実装できていません。シフトキーを押しながら何かすれば(他のキーを押す、マウスボタンを押す)glutGetModifiersでshift, ctrl, altキーが同時に押されたことが分かるのですが、ただシフトキーが押されただけという状態を検出できないのです。シフトキーを押しながらマウスを動かしても、ボタンを押さない限り検出できません。glutSpecialFunc()もシフトキーは認識しません。Webで探しても、同じ質問をしている人は何人か見つかるのですが、誰も回答をもらっていないようです。ご存じの方がおられたら、教えて下さい。

glutKeyboardFunc( mykey ) --- can detect shift key down stat
glutMouseFunc( mymouse ) --- can detect shift key down stat
glutMotionFunc( mymotion) --- can NOT detect
glutSpecialFunc( myspecial ) --- can
glutIdleFunc( myidle ) --- can NOT

まあ、とりあえず、マウスを押したときにシフトキーを押していれば、パンと一緒にズームインするようにしました。まあ、これでも使用上は問題ありませんが、他のソフトとの共通性の問題が残ります。

0 件のコメント: