3Dピッキングのために、私はこれを行う予定でした:
・タッチ座標(x,y)を取得
-モデルの頂点バッファーから頂点を選択します (xM、yM、zM)。
-次に、自分の手で (xM、yM、zM) をスクリーン座標に投影します。
(xM, yM, zM) ---> (xP, yP, ...)
次に、一致を確認します (たとえば、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);
したがって、テスト関数は次のようになりました: (TESTIFY_VERT は私のモデルの 1 つです)
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);
}
Resulted[0], Resulted[1]を (xP, yP) として使ってみた
(Resulted[0] + 1) * ( WIDTH / 2.0f ), (-Resulted[1] + 1) * ( HEIGHT / 2.0f )を使用しようとしました
そして、これは機能しません。なんで?アドバイスいただけますか?
PS 私はそのような質問をすべて見てきましたが、私の問題に答えていません。