着色器

顶点着色器

片段着色器

  1. 这个长方形所覆盖到的每一个像素,都会调用一次fragment shader。片段着色器的责任是计算灯光,以及更重要的是计算出每个像素的最终颜色,Fragment是可以被渲染到屏幕上的像素点,fragment shader即用于计算每个像素的颜色等属性

  2. 精度


    Paste_Image.png
  3. Uniform是全局变量,可用于vertex shader和fragment shader。在vertex shader中通常是变换矩阵、光照参数、颜色等,。在fragment shader中通常是雾化参数、纹理参数等

  4. 连接Vertex Shader和Fragment Shader成一个完整的OpenGL Shader Program

  5. 过程:

一些函数

  1. void glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
    参数 target:与 glBindBuffer 中的参数 target 相同;
    参数 size :指定顶点缓存区的大小,以字节为单位计数;
    data :用于初始化顶点缓存区的数据,可以为 NULL,表示只分配空间,之后再由 glBufferSubData 进行初始化;
    usage :表示该缓存区域将会被如何使用,它的主要目的是用于提示OpenGL该对该缓存区域做何种程度的优化。其参数为以下三个之一:
    GL_STATIC_DRAW:表示该缓存区不会被修改;
    GL_DyNAMIC_DRAW:表示该缓存区会被周期性更改;
    GL_STREAM_DRAW:表示该缓存区会被频繁更改;
    如果顶点数据一经初始化就不会被修改,那么就应该尽量使用 GL_STATIC_DRAW,这样能获得更好的性能。

  2. glDrawArrays(GL_TRIANGLES, 0, 3);
    GL_TRIANGLE_STRIP

    Paste_Image.png

    Paste_Image.png

    GL_TRIANGLE_FAN(扇形): T = [n-1 n-2 n] 1 2 3 4,

  3. (GLvoid *)(sizeof(float) *3) 即顶点颜色数据在VBO中的偏移量为3个float的大小,即两个相邻的顶点颜色数据之间的间隔为Vertex结构体中的顶点位置数据大小。由此也可看出,该偏移量是针对每个顶点数据而言的。在OpenGL的世界中,都是针对一个个位置或像素进行绘制的。

图片的像素化

  1. 要(几何图形)让点线面,变成能在屏幕上显示的像素,就需要Rasterize这个过程
  2. 光栅化是把GPU的操作转到CPU上了,生成位图缓存,直接读取复用。
  3. 当使用圆角,阴影,遮罩的时候,图层属性的混合体被指定为在未预合成之前不能直接在屏幕中绘制,所以就需要屏幕外渲染被唤起。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容