OpenGL笔记

OpenGL的优势
OpenGl的主程序运行在CPU上,主程序(CPU)向显存写入图像定点等数据,并启动渲染器,着色器程序开始在GPU运行,在GPU上面做运算速度快很多。GPU与CPU的区别可以参考http://www.cnblogs.com/biglucky/p/4223565.html,CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景。其中GPU注重输入不同的数据,进行相同的预算;而CPU需要很强的通用性来处理各种不同类型的数据,同时又需要各种逻辑判断分支跳转的处理,使得CPU的内部结构异常复杂。

OpenGL的基础知识:

· OpenGL绘制的都是形状,包括绘制形状和填充颜色,绘制形状基本是三角形。
· 每个形状都有定点vertrex,顶点序列的组合就是形状
· Shader,着色器,描述如何绘制+渲染,GLSL(OpenGL Shader Language),是OpenGL的编程语言。OpenGL有两种着色器,顶点着色器(vertrex)和片元着色器(fragment)
· vertex shader,顶点着色器,控制图像定点的绘制,包括坐标、转换等。
· fragment shader,片元着色器,控制形状内图像的渲染、纹理填充内容。
OpenGL的着色器相当于画笔,顶点着色器个片元着色器的关系如下:
这里写图片描述

OpenGL实战

接下来通过创建OpenGL的工程来熟悉它。

1、创建工程OpenGLSample
这里写图片描述

2、在MainActivity中添加GLSurfaceView
步骤:
添加GLSurfaceView控件
设置OpenGL的版本号,一般设置为2
给OpenGL设置渲染器(最重要的就是这个Render类)
设置渲染模式:连续模式或懒汉模式

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 1.创建一个新的GLSurfaceView
        GLSurfaceView glSurfaceView = new GLSurfaceView(this);
        // 2.设置版本号,一般是2
        glSurfaceView.setEGLContextClientVersion(2);
        // 设置渲染器
        glSurfaceView.setRenderer(new SimpleRender());
        // 设置渲染模式为连续模式(60fps)
        glSurfaceView.setRenderMode(GLSurfaceView.RENDERMODE_CONTINUOUSLY);
    }
}

这里说明一下,上面讨论的是OpenGL,为啥创建的是GLSurfaceView对象,因为GLSurfaceView内置的Surface专门负责OpenGl的渲染。通过查看GLSurfaceView的源码,可以看出,它是OpenGL的一个子类。所以,此处我们直接通过GLSurfaceView来实战OpenGL。
SurfaceView的主要功能就是将底层显存Surface的内容显示在屏幕上,而GLSurfaceView继承自SurfaceView,GLSV在SV的基础上面增加了OpenGL绘制。
这里写图片描述

3、编写SimpleRender
重点来了,OpenGL的核心就是Render着色器,OpenGL的绘制过程就是,顶点着色器先绘制图形,然后片元着色器渲染颜色。
GLSL的创建过程:
创建GLSL程序(Program)
加载shader代码(顶点和片元)
attach shader
链接shader
获取shader id
和普通的 view 利用 canvas 来绘制不一样,OpenGL 需要加载 GLSL 程序,让 GPU 进行绘制。所以我们需要定义 shader 代码,并在 onSurfaceChanged回调中加载:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值