美文网首页
OpenGL 入门到放弃1-- 初识openGL

OpenGL 入门到放弃1-- 初识openGL

作者: 李星星星星星 | 来源:发表于2019-10-25 14:31 被阅读0次

    认识OpenGL

    什么是OpenGL?

    Open Graphics Library
    图形领域的工业标准,是一套跨编程语言、跨平台的、专业的图形编程(软件)接口。它用于二维、三维图像,是一个功能强大,调用方便的底层图形库。
    与硬件无关。可以在不同的平台如Windows、Linux、Mac、Android、IOS之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。

    什么是OpenGL ES

    针对手机、PDA和游戏主机等嵌入式设备而设计的OpenGL API 子集。
    可以使用Java/JNI开发

    OpenGL的绘图原理

    顶点数据->顶点着色器(图元装配->光栅化)->(纹理->)片元着色器->逐片元处理->帧缓存
    顶点着色器 确认形状
    片元着色器 上色

    着色器(Shader)是运行在GPU上的小程序。
    顶点着色器(vertex shader):
    如何处理顶点、法线等数据的小程序。
    片元着色器(fragment shader):
    如何处理光、阴影、遮挡、环境等等对物体表面的影响,最终生成一副图像的小程序

    绘制流程.png image.png

    Android 和 OpenGL ES

    android设备对OpenGL ES的支持:

    OpenGL ES 1.0 和 1.1 :Android 1.0和更高的版本支持这个API规范。
    OpenGL ES 2.0 :Android 2.2(API 8)和更高的版本支持这个API规范。
    OpenGL ES 3.0 :Android 4.3(API 18)和更高的版本支持这个API规范。
    OpenGL ES 3.1 : Android 5.0(API 21)和更高的版本支持这个API规范。
    目前广泛支持的是2.0 使用时需要在配置文件中加入
    <uses-feature android:glEsVersion="0x00020000" android:required="true"/>

    GLSurfaceView:

    继承至SurfaceView,它内嵌的surface专门负责OpenGL渲染。
    管理Surface与EGL
    允许自定义渲染器(render)。
    让渲染器在独立的线程里运作,和UI线程分离。
    支持按需渲染(on-demand)和连续渲染(continuous)。

    1.setRenderer(Render render)设置渲染器
    render中需要实现
    onSurfaceCreated()
    onSurfaceChanged()
    onDrawFrame()三个方法
    2.GLThread gl线程 调用渲染器

           /**
             * 配置GLSurfaceView
             */
            //1.设置EGL版本
            setEGLContextClientVersion(2);
            //2.设置渲染器
            setRenderer(new MyRenderer());
            //3.设置渲染模式
            // RENDERMODE_WHEN_DIRTY 按需渲染 当我们调动requestRender时候 请求 GLThread回调一次 onDrawFrame
            // RENDERMODE_CONTINUOUSLY 连续渲染 自动请求 GLThread调用onDrawFrame
            setRenderMode(RENDERMODE_WHEN_DIRTY);
    
    EGL:

    OpenGL是一个跨平台的操作GPU的API,但OpenGL需要本地视窗系统进行交互,这就需要一个中间控制层, EGL就是连接OpenGL ES和本地窗口系统的接口,引入EGL就是为了屏蔽不同平台上的区别。
    GLSurfaceView已经提供了EGL环境的配置,不需要我们做多余的操作。

    GLSL语言编写顶点着色器和片元着色器

    android studio中下载 GLSL plugin 插件,方便编写时高亮显示。使用插件的话对文件的后缀有要求:
    顶点着色器 .vert
    片元着色器 .frag

    image.png
    1.常用的数据类型
    float               浮点型
    vec2                含两个浮点型数据的向量
    vec4                含四个浮点型数据的向量(xyzw,rgba,stpq)
    sampler2D           2D纹理采样器(代表一层纹理)
    2.修饰符
    attribute 属性变量。只能用于 顶点着色器 中。 一般用该变量来表示一些顶点数据,如:顶点坐标、纹理坐标、颜色等。
    uniforms 一致变量。在着色器执行期间一致变量的值是不变的。与const常量不同的是,这个值在编译时期是未知的是由着色器外部初始化的。
    varying 易变变量。是从顶点着色器传递到片元着色器的数据变量。
    3.内建函数
    texture2D (采样器,坐标)  采样指定位置的纹理
    4.内建变量
    顶点 gl_Position vec4 顶点位置
    片元 gl_FragColor vec4 颜色
    5.其他
    precision lowp          低精度
    precision mediump       中精度
    precision highp         高精度
    

    为大家整理了一些GLSL语言教程,如果想更深入了解的可以参考下面的教程资料:
    权威官方文档:https://www.opengl.org/documentation/glsl/
    权威民间金典新手教程:http://blog.csdn.net/racehorse
    一个具体完整的GLSL代码:http://www.ituring.com.cn/article/851
    GLSL简单介绍和全部内置变量:http://www.linuxgraphics.cn/opengl/shader_overview.html
    http://blog.csdn.net/kaixinbingju/article/details/14518387
    http://www.cnblogs.com/mazhenyu/p/3804518.html
    百度文库完整PPT:http://wenku.baidu.com/link?url=KUUhkIFpxtJOptnaFccKEWqOJw-yvnLoYGdkiwmYW0mnRpoSENQrk6TVst1_rHZJM_2sBh61H5tKX8pbNFyImM_ObOSrMDnp9LD2bqYjjCi
    百度文库入门WORLD教程:http://wenku.baidu.com/link?url=wokPChPUUK9nuFTefB0WgxOK7ZGsfLMSRZ8JjXrB7mHR063L61GUkpWrNe7I58peo5dt6fdLVIfLoEvh5nNHRdedcKZl0qMZzwLSzD6Nj5e
    http://wenku.baidu.com/view/be62e6bcf121dd36a32d824c.html?re=view
    http://wenku.baidu.com/view/518048d528ea81c758f57800.html
    GLSL语言语法基础:http://my.oschina.net/sweetdark/blog/208024#OSC_h3_12

    OpenGL坐标系

    image.png

    以上就是openGL的一些基础知识,大家有什么不懂的可以评论告诉我,我会根据反馈进行更新。

    相关文章

      网友评论

          本文标题:OpenGL 入门到放弃1-- 初识openGL

          本文链接:https://www.haomeiwen.com/subject/cldbqqtx.html