OpenGL ES 学习一(基础)

OpenGL 状态机

openGL有记忆功能, 可以记住当前的状态 , 可以根据接收的输入和自己原先的状态,修改自己当前的状态

顶点数组和顶点缓冲区

存储在内存中的顶点数据,叫做顶点数组
将内存中的顶点数据存储在缓存中, 叫做顶点缓冲区

各个阶段的shader

在这里插入图片描述
在这里插入图片描述

顶点着色器

一般用来处理图片的顶点变化(旋转/平移/投影等)
顶点着色器是逐个顶点运算的程序(每个顶点数据都会被执行一次顶点着色器)当然这是并行的,并且顶点着⾊器运算过程中⽆法访问其他顶点的数据

片元着色器

一般⽤用来处理理图形中每个像素点颜⾊色计算和填充
片段着色器是OpenGL中用于计算片段(像素)颜色的程序。片段着色器是 逐像素运算的程序,也就是说每个像素都会执行⼀次片段着色器,当然也 是并⾏的

OpenGL 坐标变换

在这里插入图片描述
这里有一部分是用户自定义的变换, 有一部分是 OpenGL的变换(如下图所示:)
在这里插入图片描述

OpenGL 渲染架构

  • Vertex Shader可以接收Attributes、Uniforms、Texture Data。
  • Fragment Shader(片元着色器)只可以接收Uniforms、Texture Data,不能直接接收Attributes。

Attributes变量是只能在vertex shader(顶点着色器)中使用的变量,一般用来表示顶点的坐标,法线,顶点的颜色等。
Uniforms就像是C语言中的常量,Shader只能用不能修改,一般用来表示变化矩阵、材质、光照参数、颜色信息等。
Texture Data(纹理) 现实生活中,纹理最通常的作用是装饰我们的物体模型,它就像是贴纸一样贴在物体表面,使得物体表面拥有图案。但实际上在OpenGL中,纹理的作用不仅限于此,它可以用来存储大量的数据,一个典型的例子就是利用纹理存储地形信息。

在这里插入图片描述
OpenGL渲染架构图分为客户端和服务端两部分
客户端是Application程序和OpenGL的API,在CPU中执行,负责传递Attributes、Uniforms、Texture Data。
服务端负责接收客户端数据进行渲染,在GPU中执行。
Primitive Assembly(图元装配)把顶点着色器输出的顶点组合成点,线段或者三角形。
光栅化 图元装配之后的图形映射到屏幕上,确定在屏幕上每个像素点的位置。

glEnable 的常用地方

  1. 表面剔除 (绘制观察视角可以看到的面, 看不到的面则不再绘制)
// - 开始表面剔除
glEnable(GL_CULL_FACE);

关闭表⾯面剔除(默认背⾯面剔除)
void glDisable(GL_CULL_FACE);

// -  背面剔除
glCullFace(GL_BACK);

  1. 深度测试(对于要绘制出来的东西, 由于相交的部分存在前后遮挡的情况,所以有了深度测试, 保留靠近观察者的部分, 远离观察者的部分就不再绘制了)
// - 开启深度测试
glEnable(GL_DEPTH_TEST);

// - 在绘制场景前,清除颜色缓存区,深度缓冲 glClearColor(0.0f,0.0f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  1. 颜色混合(绘制的部分存在相交的可能, 并且近观察者的颜色是半透明的,则需要有颜色混合的操作)
// - 颜色混合
glEnable(GL_BlEND);

// -  设置混合函数
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

顶点坐标系和纹理坐标系

// - 使用图片纹理和视频纹理时候, 需要翻转坐标系, 图片纹理在解压图片时候翻转, 视频纹理在设置顶点和纹理坐标时候翻转
 A ----------------- B
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
    |               |
  D ----------------- C
    顶点坐标系 : (-1, 1), (1, 1), (1, -1), (-1, -1)
    纹理坐标系 : (0, 1), (1, 1), (1, 0), (0, 0)
    屏幕坐标系 : (0, 0), (320, 0), (0, 480), (320, 480)

项目地址(带注释)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值