Android OpenGL ES:标准化的MotionEvent坐标

Android OpenGL ES:标准化的MotionEvent坐标,第1张

概述我正在尝试进行触摸事件并将形状移动到触摸事件移动的任何位置.publicbooleanonTouchEvent(MotionEvente){mRenderer.setPosition(e.getX(),e.getY());returntrue;}问题是我从MotionEvent获得的坐标是屏幕位置(以像素为单位),而不是归一化坐标[-1,1].如何将

我正在尝试进行触摸事件并将形状移动到触摸事件移动的任何位置.

public boolean ontouchEvent(MotionEvent e) {    mRenderer.setposition(e.getX(), e.getY());    return true;}

问题是我从MotionEvent获得的坐标是屏幕位置(以像素为单位),而不是归一化坐标[-1,1].如何将屏幕坐标转换为标准化坐标?提前致谢!

解决方法:

    float x = e.getX();    float y = e.getY();    float screenWIDth;    float screenHeight;    float sceneX = (x/screenWIDth)*2.0f - 1.0f;    float sceneY = (y/screenHeight)*-2.0f + 1.0f; //if bottom is at -1. Otherwise same as X

要添加一些更通用的代码:

 /* Source and target represent the 2 coordinate systems you want to translate points between. For this question the source is some UI vIEw in which top left corner is at (0,0) and bottom right is at (screenWIDth, screenHeight) and destination is an openGL buffer where the parameters are the same as put in "glOrtho", in common cases (-1,1) and (1,-1). */float sourcetopleftX;float sourcetopleftY;float sourceBottomrightX;float sourceBottomrightY;float targettopleftX;float targettopleftY;float targetBottomrightX;float targetBottomrightY;//the point you want to translate to another system    float inputX;    float inputY;//result    float outputX;    float outputY;outputX = targettopleftX + ((inputX - sourcetopleftX) / (sourceBottomrightX-sourcetopleftX))*(targetBottomrightX-targettopleftX);outputY = targettopleftY + ((inputY - sourcetopleftY) / (sourceBottomrightY-sourcetopleftY))*(targetBottomrightY-targettopleftY);

使用此方法,您可以在任何N维正交系统之间平移任何点(对于3D,只需为Z添加与对X和Y相同的点即可).在此示例中,我使用了视图的边界坐标,但是您可以在场景中使用任何2个点,例如,如果使用屏幕中心和右上角,则此方法将完全相同.唯一的局限性是
        sourcetopleftX!=每个维度的sourceBottomrightX

总结

以上是内存溢出为你收集整理的Android OpenGL ES:标准化的MotionEvent坐标全部内容,希望文章能够帮你解决Android OpenGL ES:标准化的MotionEvent坐标所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076693.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存