GLES 2.0按屏幕2D点移动对象

时间:2017-06-21 10:09:57

标签: android opengl-es

在openGL ES 2.0 Android中,

我需要通过2D屏幕点移动对象(例如,触摸点,x = 600,y = 300)

但是,就像这样的截头音,

Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);

Matrix.translateM(.. x,y,...)不起作用,因为矩阵大小的值太大

在这种情况下如何计算正确的值?

1 个答案:

答案 0 :(得分:0)

如果要围绕平截头体矩阵移动对象,则最好计算对象所在的角度。结果应该是2个角度加上一个半径 - 距离物体的距离。半径可能是固定的,或者你需要从之前的位置计算它。

一旦你有两个角度和一个半径然后使用一个球体,应该检索坐标,类似于:

x = cos(verticalAngle)*sin(horizontalAngle)*radius
y = sin(verticalAngle)*radius 
z = cos(verticalAngle)*cos(horizontalAngle)*radius

要获得角度,您需要检查视野,然后使用点位置和屏幕尺寸之间的比率计算角度。

视野由您的边界坐标和near定义,right = tan(fov.x)*near*0.5所以fov.x = atan(right*2.0/near)y使用top。

因此,使用fov,您现在知道xy维度中整个屏幕的角度。假设零位于屏幕的中心(如果没有应用其他矩阵),则最左边的部分位于-fov.x*0.5,位于fov.x*0.5,底部位于-fov.y*0.5,顶部位于{ {1}}。

现在您需要根据屏幕尺寸计算触摸的相对位置,例如fov.y*0.5x = touch.x/screen.width。然后简单地将线性插值应用为y = touch.y/screen.height

T = A + (B-A)*s