对于3D选择,我计划这样做:
-Get触摸坐标(x,y)
-Choose顶点从我的模型的顶点缓冲区(xM,yM,zM)。
-Then计划由我自己的手(xM,yM,zM)在屏幕上和弦
(xM,yM,zM) -> (xP,yP,.)
然后检查匹配(例如sqrt((x - xP)^2 + (y - yP)^2) < SOME_EPS)
由于投影,我在mProjectionMatrix中保存了Frustum矩阵
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);
}所以我尝试使用Resulted,Resulted1 as (xP,yP)
并尝试使用(结果+ 1) *(宽度/ 2.0f )、(-Resulted1 + 1) *(高度/ 2.0f )
但这不管用。为什么?你能给我个建议吗?
我见过所有这样的问题,他们不回答我的问题。
发布于 2016-11-07 22:22:22
也许你错过了透视分割。Resulted1除以Resulted3,并使用比率as (xP,yP),即:
float xP = Resulted[0] / Resulted[3];
float yP = Resulted[1] / Resulted[3];https://stackoverflow.com/questions/40475696
复制相似问题