美文网首页
OpenGL 绘制三角形(二)

OpenGL 绘制三角形(二)

作者: 夏了夏天_cc17 | 来源:发表于2020-07-04 23:23 被阅读0次

    三角形是OpenGL 中最基本的图形,使用OpenGL绘制三角形只需要使用OpenGL提供的固定着色器就能完成,难度并不大,下面大概大概介绍实现细节,以及我理解的实现流程;

    首先,要使用OpenGL 中的固定着色器,那么我们需要导入相关的头文件和工具库,见下图:

    图  1

    另外,我们要绘制图形,还需要定义一个着色器管理器和一个批次类容器,

    图  2

    其次,我们先来到main函数,程序的入口,下图中时主函数中所处理的所有工作

    图  3

    main函数中的代码,指定显示模式中的GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指双缓冲窗口、RGBA颜色模式、深度测试、模板缓冲区;

    图  4

    以上是main函数的涉及到的代码以及解释,GLUT中的roop运行起来后,就开始监听消息,然后根据消息触发对应的函数,其中,main函数中的glutInitWindowSize调用之后,GLUT中的roop会收到一个初始化窗口的消息,进而调用之前注册的ChangeSize函数,setupRC()是我们对渲染环境的初始化,先用一张图解释一下GLUT中的roop运行流程:

    图  5

    从图5中我们可以看到,初始化窗口会通过GLUT roop触发我们的ChangeSize函数,setupRC()会设置我们的渲染环境,包括设置窗口颜色,初始化着色器,初始化要绘制的图形顶点、初始化批次类容器,指定批次类容器图形类型、顶点个数等;批次类数据处理结束,会将相应的数据提交给着色器,这时候会触发RanderScene函数调用,也就是roop收到需要渲染函数时会调用;其中,ChangeSize和RanderScene 并不少整个程序中只运行一次,而是用户通过改变窗口大小时,会多次调用。下面是setupRC、ChangeSize和RanderScene的具体实现。

    图6 图  7

    最后,就是运行程序,得到我们绘制的三角形的效果图了,在整个渲染中,我设置的窗口大小为800x800,我们窗口的坐标系的原点O(0,0,0)在屏幕的正中心,屏幕的坐标范围从左到右也就是x轴方向为[-1,1],y方从最底端到最顶端的范围也是[-1,1];当然从我的顶点坐标中可以看出,z轴的坐标都是0,z轴的范围这里不讨论。所以看到三角形的高为整个窗口高的1/4,宽为窗口的1/2。

    图  8

    最后,我们用鼠标改变窗口大小,会看到触发上述的ChangeSize和RanderScene函数,提供我的deBug窗口的截图如下,同时,三角形在窗口的位置,以及和窗口的宽高比始终不变。

    图  9

    相关文章

      网友评论

          本文标题:OpenGL 绘制三角形(二)

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