繁体   English   中英

GLES 2.0通过屏幕2D点移动对象

[英]GLES 2.0 move object by screen 2D point

在openGL ES 2.0 Android中,

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

但是,在像这样的平截头体上,

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

Matrix.translateM(.. x,y,...)无法正常工作,因为按矩阵大小,值太大

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

如果要围绕平截头体矩阵移动对象,则可能最好计算该对象所在的角度。 结果应为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 ,顶部在fov.y*0.5

现在,您需要根据屏幕尺寸来计算触摸的相对位置,例如x = touch.x/screen.widthy = touch.y/screen.height 然后简单地对它们应用线性插值,如T = A + (BA)*s

horizontalAngle = -fov.x*0.5 + (fov.x*0.5 - -fov.x*0.5)*x
verticalAngle = fov.y*0.5 + (-fov.y*0.5 - fov.y*0.5)*y

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM