OPenGL学习笔记(1)

一个GPU会有多个处理器(几百到几千)他们同时工作,体现了GPU大规模并行处理能力

进行几何计算的处理器叫做顶点着色器,它负责对顶点进行坐标变换投影变换等。
进行片段的颜色处理的叫做片段着色器

光栅化: 实际绘制或填充每个定点之间的像素形成线段

实心3D几何体无非是将顶点间的点连接起来然后对三角形进行
光栅化而使对象变得有实体。
变换、着色、纹理与混合我们看到的任何计算机渲染场景都无非
是灵活的运用这四种技术而产生的

OpenGL API 主要是通过扩展机制来发展,这种扩展机制能够用来获得
指向任何加入openGL 1.0之后的任何版本核的openGL函数的函数指针
使用一个自动初始化所有新函数指针并包括所需类型定义,常量和枚举值
的扩展加载库,其中维护比较好的并开源的是GLEW

openGL 变量类型和最小位宽
GLhalf         :     16     半精度浮点值
GLsizei     :     32    无符号32位整数
GLenum        :    32    无符号32位整数
GLclampf    :    32    [0,1]范围内的32位浮点数
GLbitfielf     :     32     32位表示那些包含二进制位段的变量的等
GLsizeiptr    :    本地指针大小          无符号整数
GLintptr    :    本地指针大小          有符号整数
GLsync        :    本地指针大小          同步对象句柄

Vertex sharder(顶点着色器):
    着色语言器都是由GLSL编写的程序
    
    所谓属性就是每个顶点都要改变的数据元素。属性总是以四维向量的形式进行
    内部存储,即使我们不会使用到所有的4个分量
    
    属性只供顶点着色器使用,对于片段着色器没有什么意义。
    
unifrom 值:
    我们通常设置完unifrom变量就紧接着发出渲染一个图元批次的命令
    
    unifrom变量实际上可以无次数限制的使用
    
    顶点着色器和片段着色器中都可以有unifrom变量
    
    unifrom变量既可以是标量类型也可以是矢量类型我们也可以
    使用unifrom矩阵
    
默认情况下,opengl认为具有逆时针方向环绕的多边形是正面,顺时针
方向环绕的面为背面。

提高渲染性能:
    表面剔除
    深度测试
    
三维图形绘制顺序:
    对构成图形的图元进行排序,并且首先渲染那些比较远的三角形,再在它们
    上方渲染那些比较近的三角形,这种方式称为“油画法”这种放法在计算机图形
    处理中非常底效。主要原因有两个:
    (1) 我们必须对任何发生几何图形重叠地方的每个像素进行两次写操作,
        写操作会使得速度很慢
    (2)对独立的图元进行排序开销会很高
    
正面背面剔除:
    对正面和背面三角形进行区分的原因之一就是为了进行剔除
    剔除能够极大的提高性能,在渲染的图元装配阶段就整体抛弃了
    一些三角形并没有进行任何不适当的光栅化操作
    
    GL_CULL_FACE
    glcullFace(GLenum mode)
    mode: GL_front  GL_BACK  GL_Front_AND_BACK

深度测试:
    在绘制像素时比较Z值 Z值教大的像素覆盖Z值较小的,
    反之不能遮挡住原来的像素

    在内部这个方法是通过深度缓冲区实现的它存储屏幕上每个像素的深度值
    
    画两个相同的图元将导致片段深度测试不可预料的通过或者失败
    这种情况下通常成为Z-fighting(Z冲突)
    GL_DEPTH_TEST

裁剪:
    另一种提高渲染性能的方法是只刷新屏幕上发生变化的部分,我们可呢还要
    将opengl渲染限制在窗口中一个较小的区域中,opengl允许我们在将要
    进行渲染的窗口中指定一个裁减框。在默认情况下裁减框与框口同样大小
    并且不会进行裁剪测试
    GL_SCISSOR_TEST     glscissor

混合:
    通常情况下opengl渲染是会把颜色值放在颜色缓冲区,每个片段的深度值
    也放在深度缓冲区中
    如果不打开混合功能颜色会被覆盖或者隐藏,如果打开混合功能新的颜色与
    以存在的颜色值在颜色缓冲区中进行组合
    已经存储在颜色缓冲区中的颜色值叫做目标颜色值
    当前渲染命令的结果进入颜色缓冲区的颜色值称为源颜色
    GL_BLEND

抗锯齿:标准翻译为“抗图像折叠失真”
      由于在3D图像中受分辨率的制约物体的边缘总会或多或少的呈现三角型的锯齿
      而抗锯齿就是对图像边缘进行柔化处理使图像边缘看起来更加平滑更接近实物
      的物体,它是提高画质以使之柔和的一种方法
      
      缺点:对整个场景进行抗锯齿处理并没有想象中的那么方便,这是因为抗锯齿
      处理基于混合操作的,这就需要从前到后所有的图元进行排序这是非常麻烦的
      GL_POINT_SMOOTH
      GL_LINE_SMOOTH
      GL_POLYGON_SMOOTH

多重采样:(opengl 1.3以上版本)    
    如果打开这个特性,已包含了颜色、深度和模板值的帧缓冲区就会添加一个额外的
    缓冲区,所有的图元每一个像素上都进行多次采样,结果就会存储在这个缓存区中
    每当这个像素进行更新的时候这些采样值进行解析以产生一个单独的值
    GL_MULTISAMPLE  multiSample

你可能感兴趣的:(OPenGL)