OpenGL-ES:如何在触摸坐标处设置对象?
我正在寻找一种方法,让 opengl 对象(三角形等)位于屏幕上触摸屏幕的位置。现在,我的屏幕上有一个 3D 金字塔,它根据触摸开始位置与拖动位置之间的差异在屏幕上移动。
在普通的 SurfaceView 中,我可以执行类似 element.x = event.getX()
的操作,但这在 openGL 中不起作用。那么有人有想法吗?
ps:我使用的是java/Android。
I'm looking for a way to have an opengl object(triangles etc) at the location on the screen where you touch the screen. I now have an 3D pyramid on the screen, wich moves over the screen, based on the difference between the start of your touch, and where you dragged it to.
In normal surfaceViews I could just do something like element.x = event.getX()
, but this will not work in openGL. So anyone has an idea?
ps: i'm using java/Android.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
OpenGL 也不像表面视图,其中每个元素都是持久的。它相当于钢笔和画笔的 3D 效果。您需要自己跟踪所有数据。
因此,在触摸事件处理程序中,您使用输入坐标来投影光线,以便某个平面垂直于视图。您必须自己实现此投影,但这很简单:搜索“光线平面相交”。这将为您提供平面上的坐标,该坐标与用户触摸的屏幕上的点投影相对应。您可以使用此坐标来变换对象并重新绘制场景。
OpenGL is nor like a surface view, where each element is persistent. It's the 3D equivalent to pens and brushes. You need to keep track of all data yourself.
So in your touch event handler you use the input coordinate to project a ray so some plane perpendicular to the view. You've to implement this projection yourself, but it's easy enough: Search for "ray plane intersection". This gives you the coordinates on the plane, that corresponds with that points projection on the screen where the user touched. You use this coordinates to transform the object and redraw the scene.