Opengl

OpenGL 基础渲染

2020-07-07  本文已影响0人  小溜子

1、OpenGL的渲染架构

OpenGL渲染管线简化流程图
image.png

1、 客户端-服务器

管线上半部分是客户端,下半部分是服务器。就 OpenGL 而言,客户端是存储在 CPU 存储器中的,驱动程序将渲染命令与数据组合起来发给服务器执行。
服务器和客户端在功能上是异步的。客户端不断的将数据和命令组合在一起送入缓冲区,缓冲区再发送到服务器执行。

2、渲染流程

1、设置顶点数据和其他参数。
2、在顶点着色器中进行运算得到裁剪坐标
3、细分着色器、几何着色器,不可自定义,跳过
4、图元组合,根据设置构建的点、线三角形。
5、裁剪,裁剪掉超出显示区域的部分
6、光栅化,将图源栅格化为一个个的像素点。
7、片元着色器,将对应的栅格(像素)填充为具体的颜色(纹理)。
8、渲染所得图形。

3、着色器传递渲染数据的方法

GL_REPEAT           重复纹理图像
GL_MIRRORED_REPEAT  和GL_REPEAT一样,每次图形是镜像放置的.
GL_CLAMP_TO_EDGE    纹理坐标会被约束在0-1之前,超出的部份会重复纹理坐标的边缘,产生一种边缘被拉伸的效果
GL_CLAMP_TO_BORDER  超出的坐标为用户指定的边缘颜色。

2、图元

image.png

点|GL_POINTS
线 |GL_LINES
条带线 |GL_LINE_STRIP
循环线 |GL_LINE_LOOP
独立三角形 |GL_TRIANGLES
三角形条带 |GL_TRIANGLE_STRIP
三角形扇面 |GL_TRIANGLE_FAN

元图类型 OpenGL枚举量
GL_POINTS
线 GL_LINES
条带线 GL_LINE_STRIP
循环线 GL_LINE_LOOP
独立三角形 GL_TRIANGLES
三角形带条 GL_TRIANGLE_STRIP
三角形扇面 GL_TRIANGLE_FAN

简单介绍使⽤GLBatch 帮助类绘制几何图形的接口调用

    //定义一些图形顶点
    GLfloat vPyramid[] = {
        -2.0f, 0.0f, -2.0f,
        2.0f, 0.0f, -2.0f,
        0.0f, 4.0f, 0.0f,

        2.0f, 0.0f, -2.0f,
        2.0f, 0.0f, 2.0f,
        0.0f, 4.0f, 0.0f,
        
        2.0f, 0.0f, 2.0f,
        -2.0f, 0.0f, 2.0f,
        0.0f, 4.0f, 0.0f,
        
        -2.0f, 0.0f, 2.0f,
        -2.0f, 0.0f, -2.0f,
        0.0f, 4.0f, 0.0f
      };
  //
     //批次处理
    triangleBatch.Begin(GL_TRIANGLES,12);
    triangleBatch.CopyVertexData3f(vPyramid);
    triangleBatch.End();

    //开始绘制
    triangleBatch.Draw();

3、着色器

1、单元着色器(GLT_SHADER_IDENTITY)

参数1: 存储着⾊器种类-单元着⾊器
参数2: 颜⾊值
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, 
                                 GLfloat vColor[4]);

使⽤场景:绘制默认OpenGL 坐标系(-1,1)下图形。 图形所有片段都会以⼀种颜⾊填充。
2、平面着色器(GLT_SHADER_FLAT)

参数1: 存储着⾊器种类-平⾯着⾊器
参数2: 允许变化的4*4矩阵
参数3: 颜⾊色值
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,
                                 GLfloat mvp[16],
                                 GLfloat vColor[4]);

使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。
3、上色着色器(GLT_SHADER_SHADED)

参数1: 存储着⾊器种类-上⾊着⾊器
参数2: 允许变化的4*4矩阵
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,
                                 GLfloat mvp[16]);

使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。颜色将会平滑地插入到顶点之间,称为平滑着色。
4、默认光源着色器(GLT_SHADER_DEFAULT_LIGHT)

参数1: 存储着⾊器种类-默认光源着⾊器
参数2: 模型4*4矩阵
参数3: 投影4*4矩阵
参数4: 颜⾊值
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vColor[4]);

使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器会使绘制的图形产生阴影和光照的效果。
5、点光源着色器(GLT_SHADER_POINT_LIGHT_DIEF)

参数1: 存储着⾊器种类-点光源着⾊器
参数2: 模型4*4矩阵
参数3: 投影4*4矩阵
参数4: 点光源的位置
参数5: 漫反射颜⾊值
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vLightPos[3],
                                 GLfloat vColor[4]);

使⽤场景:在绘制图形时, 可以应用变换(模型/投影变化)。这种着⾊器会使绘制的图形产⽣阴影和光照的效果。它与默认光源着⾊器⾮常类似,区别只是光源位置可能是特定的。

6、纹理替换矩阵着色器(GLT_SHADER_TEXTURE_REPLACE)

参数1: 存储着⾊器种类-纹理替换矩阵着⾊器
参数2: 模型4*4矩阵
参数3: 纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,
                                 GLfloat mvMatrix[16],
                                 GLint nTextureUnit);

使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,使⽤纹理单元来进⾏颜⾊填充。其中每个像素点的颜⾊是从纹理中获取。
7、纹理调整着色器(GLT_SHADER_TEXTURE_MODULATE)

参数1: 存储着⾊器种类-纹理调整着⾊器
参数2: 模型4*4矩阵
参数3: 颜⾊值
参数4: 纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,
                                 GLfloat mvMatrix[16],
                                 GLfloat vColor[4],
                                 GLint nTextureUnit);

使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵。着⾊器将⼀个基本⾊乘以⼀个取⾃纹理单元nTextureUnit 的纹理,将颜⾊与纹理进⾏颜⾊混合后才填充到⽚段中。

8、纹理光源着色器(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF)

参数1: 存储着⾊器种类-纹理光源着⾊器
参数2: 模型4*4矩阵
参数3: 投影4*4矩阵
参数4: 点光源位置
参数5: 颜⾊值
参数6: 纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vLightPos[3],
                                 GLfloat vBaseColor[4],
                                 GLint nTextureUnit);

使⽤用场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘)。

上一篇 下一篇

猜你喜欢

热点阅读