美文网首页
二 、OpenGL初绘制四边形

二 、OpenGL初绘制四边形

作者: A慢慢懂 | 来源:发表于2020-07-21 22:48 被阅读0次

    第一个OpenGL绘制的在红色的背景上绘制一个蓝色的四边形。程序的输出的结果如下。


    第一个程序输出结果.png

    代码如下:

    #include <stdio.h>
    #include "GLTools.h"
    #include <glut/glut.h>
    GLBatch triangleBatch;
    GLShaderManager shaderManager;
    //窗口大小改变时接受新的宽度和高度,其中0,0代表窗口中的左下角坐标,w,h代表像素
    void ChangeSize(int w,int h)
    {
        glViewport(0,0, w, h);
    }
    //为程序作为一次性的设置
    void SetupRC()
    {
        //设置背景颜色
        glClearColor(1.0f,0.0f,0.0f,1.0f);
        //初始化着色管理器
        shaderManager.InitializeStockShaders();
        //设置三角形,其中数组vVert包含
        GLfloat vVerts[] = {
            -0.5f,0.0f,0.0f,
            0.5f,0.0f,0.0f,
            0.0f,0.5f,0.0f,
            -0.5f,0.0f,0.0f,
            0.5f,0.0f,0.0f,
            0.0f,-0.5f,0.0f,
        };
        //批次处理
        triangleBatch.Begin(GL_TRIANGLES, 6);
        triangleBatch.CopyVertexData3f(vVerts);
        triangleBatch.End();
        //     GLfloat vVerts2[] = {
        //     -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(vVerts2);
        //        triangleBatch.End();
    }
    //开始渲染
    void RenderScenen(void){
        //清除一个或一组特定的缓冲区
        glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
        //设置一组浮点数来表示红色
        GLfloat vRed[] = {0.0f,0.0f,1.0f,1.0f};
        shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
        triangleBatch.Draw();
        glutSwapBuffers();
    }
    int main(int argc,char* argv[])
    {
        
        gltSetWorkingDirectory(argv[0]);
        glutInit(&argc, argv);
        glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
        
        glutInitWindowSize(600,600);
        glutCreateWindow("Triangle");
        
        glutReshapeFunc(ChangeSize);
        glutDisplayFunc(RenderScenen);
        
        GLenum err = glewInit();
        if(GLEW_OK != err) {
            fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
            return 1;
        }
        SetupRC();
        glutMainLoop();
        return 0;
        
    }
    

    - 包含的头文件

    一般在编写程序之前,都会需要函数和类定义的头文件。此次OpenGL包含了

    #include <stdio.h>
    #include "GLTools.h"
    #include <glut/glut.h>
    

    GLTools包含了大部分GLTools的独立函数。glut/glut.h则适用于APPLE平台中。

    - 启动GLUT

    一般main函数都是程序的入口

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

    设置当前工作目录
    gltSetWorkingDirectory(argv[0]);
    初始化GLUT库
    glutInit(&argc, argv);
    然后再告诉GLUT库,创建窗口使用那种类型的显示模型
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    GLUT_DOUBLE为双缓冲窗口,
    GLUT_RGBA为RGBA颜色模式,
    GLUT_DEPTH为深度测试,
    GLUT_STENCIL为模版测试。
    接下来窗口大小和以Triangle为标题的窗口。

    glutInitWindowSize(600,600);
    glutCreateWindow("Triangle");
    

    然后为窗口改变大小设置一个回调函数,再注册一个函数以包含OpenGL渲染代码

    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScenen);
    

    在做渲染之前,检查确定驱动程序的初始化没有出现任何问题。

    GLenum err = glewInit();
        if(GLEW_OK != err) {
            fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
            return 1;
        }
    

    最后一项工作就是调用SetupRC。在这里可以进行渲染。

    SetupRC();
    

    最后,主循环结束并结束main函数。

    相关文章

      网友评论

          本文标题:二 、OpenGL初绘制四边形

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