美文网首页
OpenGL 三角形渲染

OpenGL 三角形渲染

作者: _涼城 | 来源:发表于2020-07-07 13:29 被阅读0次

OpenGL 三角形渲染

环境搭建
引入头文件
  • 引入着色器管理器

    #include "GLShaderManager.h";
    

    这是GLTool的着色器管理器类。着色器管理类不仅允许我们创建并管理着色器,还提供一组存储着色器。

  • 引入库文件

    #include "GLTools.h";
    

    GLTools.h头文件中包含了大部分GLTools中类似C语音的独立函数,而每个GLTools的C++类则有自己的头文件

    #include <GLUT/GLUT.h>;
    
声明变量
//定义一个,着色管理器
GLShaderManager shaderManager;

//简单的批次容器,是GLTools的一个简单的容器类。
GLBatch triangleBatch;
三角形渲染执行流程
三角形渲染流程.png
int main(int argc,char *argv[])
{

    //初始化GLUT库,这个函数只是传说命令参数并且初始化glut库
    glutInit(&argc, argv);

    /*
     初始化双缓冲窗口,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指
     双缓冲窗口、RGBA颜色模式、深度测试、模板缓冲区

     --GLUT_DOUBLE`:双缓存窗口,是指绘图命令实际上是离屏缓存区执行的,然后迅速转换成窗口视图,这种方式,经常用来生成动画效果;
     --GLUT_DEPTH`:标志将一个深度缓存区分配为显示的一部分,因此我们能够执行深度测试;
     --GLUT_STENCIL`:确保我们也会有一个可用的模板缓存区。
     深度、模板测试后面会细致讲到
     */
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);

    //GLUT窗口大小、窗口标题
    glutInitWindowSize(800, 600);
    glutCreateWindow(&quot;Triangle&quot;);

    /*
     GLUT 内部运行一个本地消息循环,拦截适当的消息。然后调用我们不同时间注册的回调函数。我们一共注册2个回调函数:
     1)为窗口改变大小而设置的一个回调函数
     2)包含OpenGL 渲染的回调函数
     */
    //注册重塑函数
    glutReshapeFunc(changeSize);
    //注册显示函数
    glutDisplayFunc(RenderScene);

    /*
     初始化一个GLEW库,确保OpenGL API对程序完全可用。
     在试图做任何渲染之前,要检查确定驱动程序的初始化过程中没有任何问题
     */
    GLenum status = glewInit();
    if (GLEW_OK != status) {

        printf(&quot;GLEW Error:%s\n&quot;,glewGetErrorString(status));
        return 1;

    }

    //设置我们的渲染环境
    setupRC();
     //开始主消息循环
    glutMainLoop();

    return  0;

}
初始化渲染环境
  1. 设置背景色

  2. 初始化固定着色器

  3. 设置三角形顶点数组 (笛卡尔坐标系)

  4. 建立一个三角形的批次,仅包含三个顶点

void setupRC()
{
    //设置清屏颜色(背景颜色)
    glClearColor(0.98f, 0.40f, 0.7f, 1);
    //没有着色器,在OpenGL 核心框架中是无法进行任何渲染的。初始化一个渲染管理器。
    //在前面的课程,我们会采用固管线渲染,后面会学着用OpenGL着色语言来写着色器
    shaderManager.InitializeStockShaders();
    //指定顶点
    //在OpenGL中,三角形是一种基本的3D图元绘图原素。
    GLfloat vVerts[] = {
        -0.5f,0.0f,0.0f,
        0.5f,0.0f,0.0f,
        0.0f,0.5f,0.0f
    };

    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vVerts);
    triangleBatch.End();

}
重塑函数

在窗口大小改变时,接收新的宽度&高度

void changeSize(int w,int h) {
    /*
      x,y 参数代表窗口中视图的左下角坐标,而宽度、高度是像素为表示,通常x,y 都是为0
     */
    glViewport(0,0,w,h);
}
渲染函数
  1. 清空缓存区

  2. 设置三角形背景色,并将它传递到存储着色器

  3. 将几何图形提交着色器

  4. 进行渲染

void RenderScene(void)
{

    //1.清除一个或者一组特定的缓存区
    /*
     缓冲区是一块存在图像信息的储存空间,红色、绿色、蓝色和alpha分量通常一起分量通常一起作为颜色缓存区或像素缓存区引用。
     OpenGL 中不止一种缓冲区(颜色缓存区、深度缓存区和模板缓存区)
      清除缓存区对数值进行预置
     参数:指定将要清除的缓存的
     GL_COLOR_BUFFER_BIT :指示当前激活的用来进行颜色写入缓冲区
     GL_DEPTH_BUFFER_BIT :指示深度缓存区
     GL_STENCIL_BUFFER_BIT:指示模板缓冲区
     */
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);

    //2.设置一组浮点数来表示红色
    GLfloat vRed[] = {1.0,1.00,0.0,0.5f};

    //传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);

    //提交着色器
    triangleBatch.Draw();

    //在开始的设置openGL 窗口的时候,我们指定要一个双缓冲区的渲染环境。这就意味着将在后台缓冲区进行渲染,渲染结束后交换给前台。这种方式可以防止观察者看到可能伴随着动画帧与动画帧之间的闪烁的渲染过程。缓冲区交换平台将以平台特定的方式进行。
    //将后台缓冲区进行渲染,然后结束后交换给前台
    glutSwapBuffers();

}

相关文章

  • 第三弹 OPenGL 渲染流程图解析

    OpenGL 渲染流程图解析 OpenGL渲染架构图 如果,我们想要渲染一个三角形,具体的操作流程是什么呢?如下图...

  • 二、OpenGL 2D绘制

    1、概述 下面我通过使用OpenGL绘制三角形,来解析OpenGL的绘制原理。 我们先来回顾下OpenGL的渲染管...

  • OpenGL 正方形渲染与移动

    三角形渲染 OpenGL正方形渲染与移动 渲染 将正方形顶点存储在全局数组GLfloat vVerts[] = {...

  • OpenGL一:OpenGL简介

    Demo: 01-渲染三角形、02-正方形移动、03-绘制图形 一、OpenGL 简介 OpenGL发展至今,已经...

  • OpenGL 三角形渲染

    OpenGL 三角形渲染 环境搭建 引入头文件 引入着色器管理器#include "GLShaderManager...

  • 入门-04.你好三角形

    你好,三角形 图形渲染管线(Pipeline) 3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Pi...

  • 固定着色器渲染三角形(OpenGL ES)

    与前面OpenGL中讲到的三角形渲染[https://www.jianshu.com/p/d96a2312f765...

  • OSG3.4内置Examples解析【目录】

    opengl渲染管线 从整体上解读OpenGL的渲染流程 一 从整体上解读OpenGL的渲染流程 二 osg与an...

  • OpenGL学习笔记二

    OpenGL 基础渲染 一、OpenGL 渲染结构 有3种向OpenGL 着⾊器传递渲染数据的⽅法可供我们选择1....

  • OpenGL渲染架构

    OpenGL的渲染架构图 OpenGL渲染主架构 OpenGL渲染架构分为客户端(Client)和服务端(Serv...

网友评论

      本文标题:OpenGL 三角形渲染

      本文链接:https://www.haomeiwen.com/subject/jruaqktx.html