2012-02-24 41 views
1

私は四角形を描きました。マウスポインタの次の平面に沿って移動したいと思っています。私は開いているGL es 1.0を使用しています。以下のコードで動きの位置に差をつけようとしました:オブジェクトをマウスと共に移動する

@Override public boolean onTouchEvent(MotionEvent e) { 
    float x = e.getX(); 
    float y = e.getY(); 
    switch (e.getAction()) { 
    case MotionEvent.ACTION_MOVE: 
     mRenderer.dx = x - mPreviousX; 
     mRenderer.dy = y - mPreviousY; 
     requestRender(); 
    } 
    mPreviousX = x; 
    mPreviousY = y; 
    return true; 
} 

次に、gtranslatef関数を使ってオブジェクトをdxとdyの値で翻訳しています。

gl.glTranslatef(dx, dy,0); 

しかし、マウスポインタで少し動きますが、オブジェクトの位置に大きなズレがあります。

オブジェクトをマウスと共に移動するにはどうすればよいですか?

+0

あなたは画面上のどこかで指を押して押していますか? – SteveL

答えて

0

ポインタ座標は、通常、画面の物理的な大きさ、つまりピクセルです。 OpenGLの座標は、適用する投影およびモデルビューの行列に依存します。

あなたがしなければならないことは、画面またはビューポートの座標をオブジェクトまたはワールド空間に逆変換することです。これは、変換パイプラインを逆にすることによって行われます。行列の乗算は線形演算であるため、絶対値だけでなく、微分に対しても同様に作用します。

私はあなたにもっと話したいと思いますが、私は既存のプログラム構造を教えて、それを拡張または変更する方法を分かりやすく説明する必要があります。 http://pastebin.comなどに投稿してください。

+0

あなたの画面座標をオブジェクト座標に変換するためにgluUnproject関数を使うことができます –

+0

@SatishKumar:はい、これについて知っています。 OPが行列スタックを乱用しているかもしれない、私は勘違いしているので、私はOPに言いたくありませんでした。最初に、私はgluUnprojectをcoaxingする前に、そのコードを修正することができるようにコードを見たいと思っていました。 – datenwolf

+0

私はあなたがそうすると確信しています。彼が特定の機能を調べれば、彼自身が学ぶのは簡単かもしれないと思った。 :) –

関連する問題