目录我也照搬原书了,但是我用android studio实现
工具列表如下:
jdk 1.8android sdkandroid studio 3.5.1一部手机 或者 支持OpenGL ES 2.0 的模拟器参照网上自行安装android studio环境即可,自行创建android模拟器,勾选支持OpenGlES功能,然后就开始啦
现在我们创建第一个OpenGL程序,它的功能很简单:她要做的只是初始化OpenGL并不停地清空屏幕,因为如果屏幕是干净的,他们能工作的更快 2.1 新建工程
用rendererSet记住GLSurfaceView是否处于有限状态,移除setContentView的调用,并加入如下初始化glSurfaceView:
使用ActivityManager的一个引用获取设备配置信息,然后取出reqGIEsVersion变量检查OpenGL ES版本号。如果版本号为0x20000或者后续版本我们就可与使用OpenGL ES 2.0的api了
配置渲染表面(rendering surface),添加如下代码 如果设备支持OpenGL ES 2.0,我们就通过调用setEGLContextClientVersion(2)配置这个surface视图;然后调用setRenderer() 传送自定义Renderer类的一个新实例,上面标红,那是因为还没创建,同时设置rendererSet为true记住渲染器(renderer)已经设置过来。当surface创建或者发生变化的时候,或者要绘制新帧时,渲染器都会被GLSurfaceView调用。
在onCreate()函数的结尾处,如下代码替换setContentView();
定义一个渲染器,以便我们清空屏幕 下面是接口定义的方法:
onSurfaceCreated(GL10 gl, EGLConfig config) 当Surface被创建的时候,GLSurfaceView会调用 这个方法;这发生在应用程序第一次运行的时候,并且,当社诶被唤醒或者用户从其他activity切换回来时,这个方法也可能被调用。在实践中,这意味着,当应用程序运行时,本方法可能会被调用多次。onSurfaceChanged(GL10 gl, int width, int height) 在Surface被创建以后,每次Surface尺寸变化时,这个方法都会被GLSurfaceView调用到。在横屏、竖屏来回切换的时候,Surface尺寸会发生变化。onDrawFrame(GL10 gl) 当绘制一帧时,这个方法会被GLSurfaceView调用。在这个方法中,我们一定要绘制一些东西,即使只是清空屏幕;因为,在这个方法返回后,渲染缓冲区会被交换并显示在屏幕上,如果什么都没画,可能会看到糟糕的闪烁效果。创建一个名为 FirstOpenGLProjectRender的新类,用来实现Renderer接口,并添加如下代码
在onSurfaceCreated()中 调用glClearColor(0.0f,0.0f,0.0f,0.0f)设置屏幕清空用的颜色;前三个分别对应红、绿、蓝,最后为阿尔法(alpha),表示透明度。在onSurfaceChanged()中,调用glViewport(0,0,width,height) 设置视口尺寸,告诉了OpenGL可以用来渲染的surface的大小。在onDrawFrame()中,调用 glClear(GL_COLOR_BUFFER_BIT) 清空屏幕;这回擦除屏幕上的所有颜色,并用之前glClearColor() 调用定义的颜色填充整个屏幕运行看看本章学习如何创建一个新的OpenGL项目和清空屏幕。