を座標: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私はこのような質問をすべて見ており、私の問題に答えることはできません。
、Iはで苦しんでいました同様の問題。ありがとう、あなたは私の日を救った:) – redobot