响应触摸事件

    让对象根据预设的程序运动(如让一个三角形旋转),可以有效地引起用户的注意,但是如果希望让OpenGL ES的图形对象与用户交互呢?让我们的OpenGL ES应用可以支持触控交互的关键点在于,拓展GLSurfaceView的实现,重写方法来监听触摸事件。

    这节课将会向你展示如何监听触控事件,让用户旋转一个OpenGL ES对象。

    注意在计算旋转角度后,该方法会调用requestRender()来告诉渲染器现在可以进行渲染了。这种办法对于这个例子来说是最有效的,因为图形并不需要重新绘制,除非有一个旋转角度的变化。当然,为了能够真正实现执行效率的提高,记得使用方法以保证渲染器仅在数据发生变化时才会重新绘制图形,所以请确保这一行代码没有被注释掉:

    上述样例代码需要我们公开旋转的角度,具体来说,是在渲染器中添加一个成员变量。由于渲染器代码运行在一个独立的线程中(非主UI线程),我们必须同时将该变量声明为volatile。注意下面声明该变量的代码,另外对应的get和set方法也被声明为了成员函数:

    当完成了上述步骤,我们就可以运行这个程序,并通过手指在屏幕上的滑动旋转三角形了: