美文网首页从0开始的视觉学习
[demo1].来一个最简单的三角形吧

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

作者: NealDN | 来源:发表于2020-07-04 22:47 被阅读0次

    跳去目录


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

    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].来一个最简单的三角形吧

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