OpenGL ES入门教程(一)编写第一个OpenGL程序

这篇具有很好参考价值的文章主要介绍了OpenGL ES入门教程(一)编写第一个OpenGL程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenGL ES入门教程(一)编写第一个OpenGL程序

前言

从本文开始我将参考学习OpenGL ES应用开发实践指南 Android卷 [(美)KevinBrothaler著](提取码: 394m),并基于自己的理解以更加通俗易懂的方式讲解如何应用OpenGL ES。本系列教程的目标是应用OpenGL,所以不会涉及太多的理论知识,主要讲解方式是基于简单功能的代码拆解,学会对OpenGL ES的应用。原著文章的代码都是在eclipse工具实现,本系列教程采用Android studio工具进行实现。

既然你都看到这篇文章了,想必已经知道什么是OpenGL ES了,我也就不做赘述,本篇教你编写第一个Android上的OpenGL程序,万事开头难,但头开了,就成功了一半了。

文章内容都是个人理解,必然存在表述不专业甚至错误的情况,如有错误,还请各位博友积极指出,感谢。

1. 新建android项目

新建一个空的项目,默认Activity的代码框架如下:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
    }
}

2. 初始化OpenGL

上面我们显示的页面是xml布局的页面,如果采用OpenGL绘制页面,就需要用OpenGL自己的载体,而不必采用xml,OpenGL绘制的载体是GLSurfaceView类,首先初始化该类,示例代码如下:

public class MainActivity extends AppCompatActivity {
    private GLSurfaceView mGLSurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGLSurfaceView = new GLSurfaceView(this);
        setContentView(mGLSurfaceView);
    }
}

3. 判断是否支持OpenGL ES 2.0

我们采用OpenGL ES 2.0的接口,因此在程序运行前需要先判断是否支持,完善是否支持OpenGL ES 2.0后的代码如下:

public class MainActivity extends AppCompatActivity {
    private GLSurfaceView mGLSurfaceView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGLSurfaceView = new GLSurfaceView(this);

        // Check if the system supports OpenGL ES 2.0.
        ActivityManager activityManager =
                (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        ConfigurationInfo configurationInfo = activityManager
                .getDeviceConfigurationInfo();
                
        final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000
        if (supportsEs2)
        {
            //设置渲染器
            //...
        }
        else
        {
            Toast.makeText(this, "This device does not support OpenGL ES 2.0.",
                    Toast.LENGTH_LONG).show();
            return;
        }

        setContentView(mGLSurfaceView);
    }
}

4. 编写渲染类,并可视化OpenGL

OpenGL的绘制操作都在渲染类GLSurfaceView.Renderer中,因此,我们需要自定义一个类继承自GLSurfaceView.Renderer,然后编写绘制操作,主要重写三个方法,实现绘制红色屏幕的示例代码如下:

public class AirHockeyRenderer implements GLSurfaceView.Renderer {
    @Override
    public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
        glClearColor(1.0f, 0.0f, 0.0f, 0.0f);//设置清除背景颜色为红色,即调用glClear方法时,背景颜色设置为红色
    }

    @Override
    public void onSurfaceChanged(GL10 glUnused, int width, int height) {
        // Set the OpenGL viewport to fill the entire surface.
        glViewport(0, 0, width, height);
    }

    @Override
    public void onDrawFrame(GL10 glUnused) {
        // Clear the rendering surface.
        glClear(GL_COLOR_BUFFER_BIT);
    }
}

public class MainActivity extends AppCompatActivity {
    private GLSurfaceView mGLSurfaceView;
    private boolean mIsRendererSet=false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mGLSurfaceView = new GLSurfaceView(this);

        // Check if the system supports OpenGL ES 2.0.
        ActivityManager activityManager =
                (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        ConfigurationInfo configurationInfo = activityManager
                .getDeviceConfigurationInfo();

        final boolean supportsEs2 = configurationInfo.reqGlEsVersion >= 0x20000;
        if (supportsEs2)
        {
            mGLSurfaceView.setEGLContextClientVersion(2);//设置OpenGL版本为2.0
            mGLSurfaceView.setRenderer(new AirHockeyRenderer(this));//设置渲染类
            //GLSurfaceView也具有类似Activity的生命周期,
            //需要在Activity对应的生命周期,执行GLSurfaceView的生命周期,避免一些奇怪的bug。
            mIsRendererSet = true;
        }
        else
        {
            Toast.makeText(this, "This device does not support OpenGL ES 2.0.",
                    Toast.LENGTH_LONG).show();
            return;
        }

        setContentView(mGLSurfaceView);
    }

    @Override
    protected void onPause() {
        super.onPause();
        if (mIsRendererSet)
        {
            mGLSurfaceView.onPause();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mIsRendererSet)
        {
            mGLSurfaceView.onResume();
        }
    }
}

5. 程序运行效果

OpenGL ES入门教程(一)编写第一个OpenGL程序,OpenGL ES,android,OpenGL,OpenGL ES,java文章来源地址https://www.toymoban.com/news/detail-740950.html

到了这里,关于OpenGL ES入门教程(一)编写第一个OpenGL程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android入门教程||Android 架构||Android 应用程序组件

    Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅

    2024年02月13日
    浏览(45)
  • [Java优选系列第2弹]SpringMVC入门教程:从零开始搭建一个Web应用程序

    想和你们分享我眼里的代码世界🗺️  优选系列持续更新中💫 一直在等你,你终于来啦💖                            绿色代表解释说明                 黄色代表重点                  红色代表精髓         SpringMVC是一个基于Java的Web框架,它使

    2024年02月12日
    浏览(55)
  • ES教程:从入门到入土

    建议直接用docker。 docker启动参数说明: -d 后台启动 -p 9200:9200 将虚拟机9200端口映射到elasticsearch的9200端口(web通信默认使用9200端口) -p 9300:9300 将虚拟机9300端口映射到elasticsearch的9300端口(分布式情况下,各个节点之间通信默认使用9300端口) –name MyEs7 指定一个名字(MyEs

    2024年02月07日
    浏览(40)
  • 【Gazebo入门教程】第五讲 控制器插件的编写与配置(上)

    前言 : 在先前的博客中,我们不仅完成了对机器人模型的建立和仿真,并且创建了机器人的工作空间,即仿真环境的设置,那么想要通过控制机器人传感器来完成对于机器人的控制就需要进一步研究,学会如何使用 控制插件 ,通过编写代码在Gazebo中加载C++库完成对于机器人

    2023年04月08日
    浏览(76)
  • OpenGL ES 2.0 for Android教程(二):定义顶点和着色器

    文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(三) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章介绍我们

    2023年04月14日
    浏览(43)
  • 【Java基础教程】(二)入门介绍篇 · 下:从JDK下载安装到第一个“Hello World!”程序,解析PATH和CLASSPATH环境变量的妙用~

    JDK 安装与配置; 理解环境变量PATH和CLASSPATH的主要作用; 运行第一个Java程序。 要进行Java的程序开发,必须先有Java开发工具包( JavaDevelopmentKit,JDK )的支持。本节主要基于JDK1.8版本来介绍安装等知识,读者朋友可以直接登录 Oracle官网 去进行下载,也可以在下边链接(包含

    2024年02月13日
    浏览(62)
  • OpenGL ES 2.0 for Android教程(三):编译着色器并绘制到屏幕

    文章传送门 OpenGL ES 2.0 for Android教程(一) OpenGL ES 2.0 for Android教程(二) OpenGL ES 2.0 for Android教程(四) OpenGL ES 2.0 for Android教程(五) OpenGL ES 2.0 for Android教程(六) OpenGL ES 2.0 for Android教程(七) OpenGL ES 2.0 for Android教程(八) OpenGL ES 2.0 for Android教程(九) 本章将继续我

    2023年04月26日
    浏览(59)
  • 半天就行!教你用ChatGPT开发小程序;谁能做出中国的Discord?LangChain中文入门教程;一个周末搞定电影预告片的AI工作流 | ShowMeAI日报

    👀 日报周刊合集 | 🎡 生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! ShowMeAI知识星球资料分类「下资料」,编号「R080」 Discord 不仅是口碑最好的游戏通信产品,还是世界上规模最大、发展最快的社交网络。在最新AI浪潮中 Discord 又迎来了新的增量。 Discord 也是非常

    2024年02月11日
    浏览(37)
  • Android开发入门教程

    当涉及到 Android 开发入门教程时,以下是一个详细的大纲,包含了一些常见的实践和指导: 1. Android 概述    - 介绍 Android 平台的基本概念和特点    - 解释 Android 应用的组成和架构    - 说明 Android 应用的开发环境和工具 2. 开发准备    - 安装和配置 Java 开发环境    - 下载

    2024年02月16日
    浏览(48)
  • Android 逆向入门保姆级教程

    作者:37手游移动客户端团队 前言 什么是 Android 逆向开发? Android 逆向开发是指对已发布的 Android 应用进行分析和破解,以了解应用程序的内部工作原理,获取应用程序的敏感信息,或者修改应用程序的行为。逆向开发可以帮助开发人员了解他人的代码实现,也可以帮助黑客

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包