2016-11-07 12 views
0

を座標:OPEN GL ES 1.0。世界がスクリーン座標へ私はこれを行うことを計画した3D-ピッキング

-getタッチ座標(x、y)を

-Choose頂点私のモデルの頂点バッファ(xMと、YM、ZM)から。画面COORDSに私自身の手(xMと、YM、ZM)によって

-Thenプロジェクト

(xMと、YM、ZM)--->(X P、Y P、...)

次いで

との一致を確認し(例えば、SQRT用((X - XP)^ 2 +(Y - YP)^ 2)< SOME_EPS)

投影する私はmProjectionMatrixで錐台マトリックスを保存:

gl.glFrustumf(-ratio/q, ratio/q, -1/q, 1/q, 1, 25); 
Matrix.frustumM(mProjectionMatrix, 0, -ratio/q, ratio/q, -1/q, 1/q, 1, 25); 

mAccRotationに座標を変換保存:

gl.glLoadMatrixf(mAccRotation, 0); 

だからテスト機能がこの化し:

public void touch(float x, float y){ 

    float TESTIFY_VERT[] = {0.0f, 0.0f, -1.5f, 1.0f}; //first vert in L0 
    float Resulted[] = new float[4]; 
    float rMatrix[] = new float[16]; 

    Matrix.multiplyMM(rMatrix, 0, mProjectionMatrix, 0, mAccRotation, 0); 
    Matrix.multiplyMV(Resulted, 0, rMatrix, 0, TESTIFY_VERT, 0); 
} 

(TESTIFY_VERTは私のモデルにおけるものの一つであるが)だから私は使用してみました結果[0]は(xP、yP)

となりました。(結果の[0] +1)*(幅+ 2.0f)、(結果+ 1)*(高さ/2.0f)

これは機能しません。どうして? アドバイスをいただけますか?

PS私はこのような質問をすべて見ており、私の問題に答えることはできません。

答えて

1

多分、あなたは視点の分割がありません。すなわち、得られた[0]が得られた[1] によってが生じを分割[3]及び(XP、YP)との比率を使用:先端ため

float xP = Resulted[0]/Resulted[3]; 
float yP = Resulted[1]/Resulted[3]; 
+0

、Iはで苦しんでいました同様の問題。ありがとう、あなたは私の日を救った:) – redobot

関連する問題