在openGL ES 2.0 Android中,
我需要通过2D屏幕点移动对象(例如,触摸点,x = 600,y = 300)
但是,就像这样的截头音,
Matrix.frustumM(mProjectionMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
Matrix.translateM(.. x,y,...)不起作用,因为矩阵大小的值太大
在这种情况下如何计算正确的值?
答案 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
,您现在知道x
和y
维度中整个屏幕的角度。假设零位于屏幕的中心(如果没有应用其他矩阵),则最左边的部分位于-fov.x*0.5
,位于fov.x*0.5
,底部位于-fov.y*0.5
,顶部位于{ {1}}。
现在您需要根据屏幕尺寸计算触摸的相对位置,例如fov.y*0.5
和x = touch.x/screen.width
。然后简单地将线性插值应用为y = touch.y/screen.height
:
T = A + (B-A)*s