2016-11-07 160 views
0

對於3D採摘我打算這樣做:OPEN GL ES 1.0。世界座標到屏幕座標

- 獲得觸摸座標(X,Y)

- 選擇頂點,從我的模型的頂點緩衝(XM,YM,ZM) 。屏幕COORDS

- 然後通過項目我自己動手(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是在我的模型的人之一)

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); 
} 

所以我試圖用(xP,yP)結果[0],結果[1]

並試圖使用(Resulted [0] + 1)*(WIDTH/2.0f),(--Results [1] + 1)*(HEIGHT/2.0f)

而這不起作用。爲什麼? 你能給個建議嗎?

PS我已經看過所有這樣的問題,他們不回答我的問題。

回答

1

也許你缺少視角鴻溝。除法導致[0]導致[1]通過導致[3]並使用比率爲(XP,YP)即:

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

的提示,我掙扎在一個類似的問題。謝謝先生,你救了我的一天:) – redobot

相關問題