opengl学习

1.Opengl渲染管线:

以绘制一个sprite为例,传入一个图片和4个顶点,将顶点数据(主要是三个属性)放入缓冲区

顶点处理(vertex shader),对顶点进行坐标转换(矩阵是通过uniform传入的)

片元组装,点,线,三角形。上面一个spirte可以装成2个三角形

光栅化,将上面的顶点插值形成计算机可以显示的二维像数

像数处理(fragment shader),通常是采样纹理颜色和顶点颜色叠加

各种测试,混合,抖动

进入帧缓冲

2.Opengl渲染管线都是在GPU执行的

3.Vertex shader

顶点属性最大数量不少于8个

输入:

Attributes

Uniforms,可支持的最大数量不少于16个

Samplers,特殊的uniform

输出:

内建变量:gl_Position,2个可选变量:gl_FrontFacing,gl_PointSzie

Varying变量,可支持的最大数量不少于8个。会在光栅化的时候被线性插值

4.fragment shader

输入:

varying变量

uniform

Samplers

输出:内建变量gl_fragcolor

5.glfwSwapBuffers:双缓冲机制下交换缓冲区指针,并强制绘制,通常使用双缓冲。默认是单缓冲,单缓冲通过

glFlush强制绘制。

6.glGenBUffers:创建缓冲区

7.glBindBuffer:与缓冲区绑定,激活缓冲区

8.glBufferData:分配和初始化缓冲区对象

9.glClear(CL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);清除颜色缓冲和深度缓冲区

10.glGenTextures(GLsizei n,GLuint *textures);根据传入参数生成纹理索引。

11.bindTexture2D(,GLuint textureId),改变opengl状态,告诉opengl接下来的操作都是针对他所绑定的纹理

12.glTexParameteri,设置纹理过滤。即将图像从纹理空间映射到帧缓冲图像空间,纹理大小和显示的大小不匹配的时候,纹理重新构造的方法。GL_TEXTURE_MAG_FILTER放大过滤,

GL_TEXTURE_MIN_FILTER缩小过滤。

GL_TEXTURE_WRAP_S s方向上的贴图模式

GL_TEXTURE_WRAP_T t方向上的贴图模式

13.glTexImage2D(….)生成纹理,一般会先在内存把纹理数据做好,然后马上送到显存,有的驱动是在draw的时候才推到显存的。

14.shader其实是显卡的功能,就是利用GPU去处理像数处理。是在一开始就设置好的。在draw之前调用glUseProgram(program),加载shader,(glUseProgram(NULL)可以卸载shader)。

15.VBO:顶点缓冲对象,是在显存里面开辟的一段空间,用来缓冲定点

VAO:顶点数组对象,包含一个或多个VBO,记录绘制信息

16.Vertex shader顶点着色器传参过程

首先与缓冲区绑定glBindBuffer

填入数据glBufferData

指定顶点属性,包括顶点坐标,顶点颜色,纹理坐标

17.颜色相加:指的是光的叠加,物理上是光的强度的相加

颜色相乘应该理解为颜色的非等比缩放

另一种说法:不同光源的结果是相加的,而光源作用在材质上就是相乘

18.混合:glDisable(GL_BLEND) glEnable(GL_BLEND)开启或者关闭混合

glBlendFunc()指定混合函数

19.UV动画。UV坐标指的是纹理贴图到片元顶点上面的坐标(就是纹理坐标)。UV动画指的是改变纹理坐标得到的动画。一般可用来做水波纹。(网上的例子是在fragshader里面对坐标进行变化)

20.GluReshapeFunc是窗口改变的时候调用的函数。GluDisplayFunc是显示的时候调用的

21.Rasterize(光栅化

这个词儿Adobe官方翻译成栅格化或者像素化。没错,就是把矢量图形转化成像素点儿的过程。我们屏幕上显示的画面都是由像素组成,而三维物体都是点线面构成的。要让点线面,变成能在屏幕上显示的像素,就需要Rasterize这个过程。就是从矢量的点线面的描述,变成像素的描述。

22.三次贝塞尔曲线是由4个点控制的,二次贝塞尔曲线是由3个点控制的



你可能感兴趣的:(opengl学习)