OpenGL基本概念

OpenGL基本概念

OpenGL基本概念

  • 顶点(Vertex)

    3D图像的最小单位称为点(point)或者顶点vertex。

    它们代表三维空间中的一个点并用来建造更复杂的物体。

    多边形就是由点构成,而物体是由多个多边形组成。

    尽管通常OpenGL支持多种多边形,但OpenGLEs只支持三边形(即三角形)所以即使我们要绘制一个正方形也要把它拆分为两个三角形绘制。

  • 坐标(coordinate)

    默认情况下,以屏幕中心为坐标轴原点。

    原点左方x为负值,右边为正值。原点上方y为正,原点下方为负。垂直屏幕向外为z正,垂直屏幕向里为z负。默认情况下,从原点到屏幕边缘为1.0f,沿各轴增加或减小的数值是以任意刻度进行的–它们不代表任何真实单位,如英尺,像素或米等。你可以选择任何对你的程序有意义的刻度(全局必须保持单位一致,不能一部分使用米,一部分使用像素)。OpenGL只是将它作为一个参照单位处理,保证它们具有相同的距离。

  • 多边形(三角形)

    多边形是由点和边构成的单闭合环。 绘制多边形时需要特别注意顶点的绘制顺序,可以分为顺时针和逆时针。因为方向决定了多边形的朝向, 即正面和背面。避免渲染那些被遮挡的部分可以了有效提高程序性能。默认以逆时针次序绘制顶点的构成的面是正面。

  • 纹理与纹理贴图

    将图像数据应用到一个几何图元时,图像称之为纹理,这种技术或者方法称为纹理贴图。或者说通过一幅图像一个多边形提供细节的技术。纹理有规格,也就是分辨率,在使用的时候需要放大或者缩小使用。这个时候会带来纹理颜色失真,所以需要使用纹理采样滤波器(texture sample filter)或者映像(Mipmap)。另外纹理作为图像数据存储会占用较大空间,使用纹理压缩来(Texture compression)存储纹理数据。

  • 渲染

    渲染是把物体坐标所指定的图元转化成帧缓冲区中的图像。

    图像和顶点坐标有着密切的关系。这个关系通过绘制模式给出。

    常用到得绘制模式有GL_POINTS、GL_LINE_STRIP、GL_LINE_LOOP、GL_LINES、GL_TRIANGLES、GL_TRIANGLE_STRIP、GL_TRIANGLE_FAN。

OpenGL 中着色器、渲染管线、光栅化等概念

  • 在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。

  • 3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。

  • 图形渲染管线可以被划分为两个主要部分:

    • 第一部分把你的3D坐标转换为2D坐标
    • 第二部分是把2D坐标转变为实际的有颜色的像素。
  • 图形渲染管线接受一组3D坐标,然后把它们转变为你屏幕上的有色2D像素输出.

  • 渲染管线的每个部分:

    • 首先以数组的形式传递3D坐标作为图形渲染管线的输入,用来表示形状,这个数组叫做顶点数据(Vertex Data);顶点数据是一系列顶点的集合。一个顶点(Vertex)是一个3D坐标的数据的集合。

    • 为了让OpenGL知道我们的坐标和颜色值构成的到底是什么,OpenGL需要你去指定这些数据所表示的渲染类型。

    做出的这些提示叫做图元(Primitive),任何一个绘制指令的调用都将把图元传递给OpenGL。

    如:GL_POINTS、GL_TRIANGLES、GL_LINE_STRIP

    • 图形渲染管线的第一个部分是 顶点着色器(Vertex Shader),它把一个单独的顶点作为输入。顶点着色器主要的目的是把3D坐标转为另一种3D坐标.同时顶点着色器允许我们对顶点属性进行一些基本处理。

    • 图元装配(Primitive Assembly)阶段将顶点着色器输出的所有顶点作为输入(如果是GL_POINTS,那么就是一个顶点),并所有的点装配成指定图元的形状.

    • 图元装配阶段的输出会传递给几何着色器(Geometry Shader)。几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。

    • 几何着色器的输出会被传入光栅化阶段(Rasterization Stage),这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率

    • OpenGL中的一个片段是OpenGL渲染一个像素所需的所有数据。

    • 片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。

    • 在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值,用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。

    • 对于大多数场合,我们只需要配置顶点和片段着色器就行了。几何着色器是可选的,通常使用它默认的着色器就行了。

    • 在OpenGL中,我们必须定义至少一个顶点着色器和一个片段着色器(因为GPU中没有默认的顶点/片段着色器)

猜你喜欢

转载自blog.csdn.net/qjh5606/article/details/80037137