案例 01 OpenGL入门--绘制三角形

2021-03-02  本文已影响0人  辉辉岁月

OpenGL中三角形的绘制,就类似于学习编程时的Hello world,是一个入门级的使用,重点在于理解图形是如何绘制的

在绘制之前,需要先介绍几个知识

一、知识补充

工具类

主要有三个工具类

与之相对应的头文件如下所示

重要函数

3个自定义函数+main函数

void changeSize(int w,int h)
{
    glViewport(0, 0, w, h);

}

代码如下所示

int main(int argc,char *argv[])
{

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

  //初始化双缓冲窗口
  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);

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

  //注册重塑函数
  glutReshapeFunc(changeSize);
  //注册显示函数
  glutDisplayFunc(RenderScene);

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

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

  }

  //设置我们的渲染环境
  setupRC();
  glutMainLoop();

  return  0;

}

二、绘制三角形

三角形绘制完成后的效果如下:

准备工作的流程图如下:

下面主要解释下两个函数

设置数据:setupRC函数

函数中的主要代码如下

void setupRC()
{
    //1、设置清屏颜色(背景颜色)
    glClearColor(0.98f, 0.40f, 0.7f, 1);

    //2、初始化一个渲染管理器
    shaderManager.InitializeStockShaders();

    //3、指定顶点数据,每个顶点有三个坐标:xyz
    GLfloat vVerts[] = {
        -0.5f,0.0f,0.0f,
        0.5f,0.0f,0.0f,
        0.0f,0.5f,0.0f
    };

    //4、利用批次容器类将顶点数据传入着色管理器
    triangleBatch.Begin(GL_TRIANGLES, 3);
    triangleBatch.CopyVertexData3f(vVerts);
    triangleBatch.End();

}

显示回调函数:RenderScene函数

主要代码如下:

void RenderScene(void)
{

    //1.清除一个或者一组特定的缓存区
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);

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

    //3、顶点数据传递到存储着色器
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);

    //4、提交着色器,进行绘制
    triangleBatch.Draw();

   //5、将后台缓冲区进行渲染,然后结束后交换给前台
    glutSwapBuffers();

}

完整Demo详见Github -- OpenGL 三角形绘制

上一篇下一篇

猜你喜欢

热点阅读