OpenGL ES学习之基础工作

        最近课题中需要使用OpenGL ES的知识,但是之前没有接触过,所以计划从现在开始一步一步的认真学习,并对自己的学习进行一个总结和思考,以便今后的查漏补缺。由于学习使用的是OpenGL ES2.0版本,所以文中会用OpenGL ES代指OpenGL ES2.0。

        废话不多说,进入正题。开始学习一个初始化OpenGL并不停的清空屏幕的一个基础程序。

  1. 创建项目FirstOpenGLProjectActivity。
  2. 使用GLSurfaceView初始化OpenGL,GLSurfaceView实际上为自己创建了一个窗口,让底层的OpenGL surface显示出来。
  3. 创建GLSurfaceView实例,并通过Setrenderer记住GLSurfaceView是否处于有效状态,同时移除项目创建时候自动对setContentView()的调用,将GLSurfaceView实例(glSurfaceView)加入进行初始化。
    public class FirstOpenGLProjectActivity extends Activity {
       
        private GLSurfaceView glSurfaceView;
        private boolean rendererSet = false;//记住GLSurfaceView是否处于有效状态
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            glSurfaceView = new GLSurfaceView(this);//创建GLSurfaceView实例  
    setContentView(glSurfaceView);//将GLSurfaceView加到activity中并显示到屏幕中}}

  4. 创建渲染器新类FirstOpenGLProjectRenderer,并实现Renderer接口。该渲染器接口主要定义有三个方法,即onSurfaceCreated(GL10 glUnused, EGLConfig config)方法:当Surface被创建的时候,GLSurfaceView会调用这个方法;onSurfaceChanged(GL10 glUnused, int width, int height)方法:在Surface被创建后,每次Surface尺寸变化时(横竖屏切换时),此方法都会被GLSurfaceView调用;onDrawFrame(GL10 glUnused)方法:当绘制一帧时,此方法会被GLSurfaceView调用。并为这三个方法对应设置清空屏幕用的颜色、视口尺寸和清空屏幕命令。
    @Override
        public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
            // 将背景清除颜色设置为红色. 前三个参数分别对应红色、绿色和蓝色,最后的参数对应一个特殊的分量,称为阿尔法,它经常用来表示半透明度或者透明度。
            glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
        }
    
        @Override
        public void onSurfaceChanged(GL10 glUnused, int width, int height) {
            // 设置OpenGL的视口(viewport)尺寸 铺满整个surface。
            glViewport(0, 0, width, height);
            
        }
    
        @Override
        public void onDrawFrame(GL10 glUnused) {
            // Clear the rendering surface.
            glClear(GL_COLOR_BUFFER_BIT);
        }

    需要在FirstOpenGLProjectActivity类中
    glSurfaceView = new GLSurfaceView(this);之后调用sentRenderer()方法传入自定义的FirstOpenGLProjectRenderer类的一个新实例,并通过设置rendererSet为true记住渲染器已经被设置过了。
  5. 使用onPause()和onResume()方法对后台渲染线程进行暂停和继续,同时释放和续用OpenGl上下文。
    @Override
        protected void onPause() {
            super.onPause();
            
            if (rendererSet) {
                glSurfaceView.onPause();
            }
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            
            if (rendererSet) {
                glSurfaceView.onResume();
            }
        }

    
    
    
    

        最后贴上效果图:


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值