[demo1].来一个最简单的三角形吧

跳去目录


首先,我们需要搭建一个基本的窗口

1. 初始化glut模块
glutInit(&argc, argv);
2. 加载配置模块

​ 需要加载的有

  1. GLUT_DOUBLE 双缓冲窗口

  2. GLUT_RGBA RGBA颜色模式(后面尝试一下能否家在HSV颜色模式)

  3. GLUT_DEPTH 深度测试模块

  4. GLUT_STENCIL 模版缓冲区

    /**
         * GLUT_DOUBLE 双缓冲窗口 是指绘图命令实际上是离屏缓存区执行的,然后迅速转换成窗口视图,这种方式经常用来生成动画效果
         * GLUT_RGBA RGBA颜色模式 RGBA通道,R G B A 的范围分别为 0-1
         * GLUT_DEPTH 深度测试 标志将一个深度缓存区分配为显示的一部分,因此我们能够执行深度测试
         * GLUT_STENCIL 模版缓冲区 确保有一个可用的模版缓冲区
         */
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
    
3.设置窗口大小 (后面的视口大小尽量与视图大小一致)
glutInitWindowSize(600, 400);
4.给这个窗口取个名字并创建这个窗口
glutCreateWindow("Triangle");
5.设置一个方法,用于捕获窗口改变时的消息
/**
 * @param w 捕获到的宽度
 * @param h 捕获到的的高度
 */
void ChangeSize(int w, int h)
{
    
}

glutReshapeFunc(ChangeSize);
6.注册一个方法,用于设置显示的内容(屏幕刷新的时候)
void RenderScene(void)
{
    
}

glutDisplayFunc(RenderScene);
7.初始化GLEW库,并检查驱动初始化过程中是否出现问题,以确保OpenGL API是完整的,可用的
GLenum status = glewInit();
    if (status != GLEW_OK) {
        printf("GLEW Occur an error: %s \n", glewGetErrorString(status));
        return 1;
    }
8.设置渲染环境(准备工作)
void SetupRC()
{
    
}


SetupRC();
9.加载并启动MainLoop配置
glutMainLoop();

至此,基本窗口就搭建完毕了,接下来开始写窗口内的内容


接下来,配置一下窗口大小发生变化时的操作

void ChangeSize(int w, int h)
{
    glViewport(0, 0, w, h)
}

当初始化窗口或拉动窗口边界改变窗口大小时,将窗口大小改变为初始化的大小或拉动到的大小,如果不设置这一步的话,


然后进行绘制的准备

  1. 设置画板的背景颜色

    //设置成了水蓝色
    glClearColor(212/255.0, 242/255.0, 231/255.0, 1);
    
  2. 创建一个全局的着色器,用来绘制图案,并初始化

    GLShaderManager shaderManager;
    shaderManager.InitializeStockShaders()
    
  3. 设置图形顶点数据

    GLfloat vTops[] = {
            -0.4, -0.3, 0,
            0.6, -0.7, 0,
            0.2, 0.5, 0
        };
    
  4. 创建一个全局容器,用来描绘路径

    GLBatch triangleBatch;
    
  5. 设置绘制方式与绘制顶点个数,并将顶点数据拷贝进容器内

    /**
         * GL_TRIANGLES 三角形
         */
    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vTops);
    
  6. 发送准备结束的信号,进入绘图阶段

    triangleBatch.End();
    

最后开始画图

  1. 清空缓冲区(可能保留有之前的状态,需要清空)

    /**
         * 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. 选中着色器(就像ps那样),并着色器的属性(主要是设置颜色)

    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vPencil);
    
  3. 调用开始绘制的命令,并切换显示器的缓冲区(现在一般的显示器都是双缓冲区,在显示的时候会进行新的绘制,绘制完毕后会显示这次的绘制,并切换缓冲区并进行新的绘制)

    triangleBatch.Draw();
    glutSwapBuffers();
    
  4. 这个时候,三角形就出现在屏幕上啦 Nice Job~

Triangle.png

Demo在这里


跳去目录

你可能感兴趣的:([demo1].来一个最简单的三角形吧)