zoukankan      html  css  js  c++  java
  • OpenGL学习笔记:第一个OpenGL程序

      OpenGL环境搭建参考博客:VS2015下OpenGL库的配置

    #include<GLglew.h>
    #include<GLTools.h>
    #include<GLShaderManager.h>
    
    #ifdef __APPLE__
    #include<GLglut.h>
    #else
    #define FREEGLUT_STATIC
    #include<GLglut.h>    
    #endif
    
    
    GLShaderManager    shaderManager;    //    声明一个着色器管理器的实例
    GLBatch triangleBatch;    //    声明一个GLBatch实例
    
    
        //    窗口大小改变函数
    void ChangeSize(int w,int h) {
        //    修改视窗的大小
        glViewport(0, 0, w, h);
    }
    
    //    设置渲染的初始化
    void SetupRC() {
        //    设置背景颜色
        glClearColor(0.0f, 0.0f, 1.0f, 1.0f);    //    设置为蓝色
    
        shaderManager.InitializeStockShaders();
    
        //    设置三角形
        //    顶点组成三角形图元
        GLfloat vVerts[] = {
            -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(vVerts);
        triangleBatch.End();
    
    }
    
    //    绘制场景
    void RenderScene(void) {
        //    清除缓冲区
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    
        //    将数组传递给着色器
        //    着色器用制定的颜色进行渲染
        GLfloat vRed[] = { 1.0f,0.0f,0.0f,1.0f };
        shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
        triangleBatch.Draw();    //    指示将集合图形提交到着色器
    
        glutSwapBuffers();
    
    }
    
    //    主函数
    int main(int argc, char *argv[]) {
        gltSetWorkingDirectory(argv[0]);
    
        // 调用glutInit函数传输命令行参数并初始化GLUT库
        glutInit(&argc, argv);
    
        //    告诉GLUT库,在创建窗口时要使用那种类型的显示模式
        //    GLUT_DOUBLE表示双缓冲窗口,GLUT_RGBA表示RGBA颜色模式
        glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
    
        //设置GLUT窗口的大小,创建以"Triangle"为标题的窗口
        glutInitWindowSize(800, 600);
        glutCreateWindow("Triangle");
    
        //为改变窗口大小而设置一个回调函数
        //注册一个函数以包含OpenGL渲染代码
        glutReshapeFunc(ChangeSize);
        glutDisplayFunc(RenderScene);
    
        //    调用glewInit初始化GLEW库
        //    检查取人驱动程序初始化过程无问题
        GLenum err = glewInit();
        if (GLEW_OK != err) {
            fprintf(stderr, "GLEW Error:%s
    ", glewGetErrorString(err));
            return 1;
        }
    
        SetupRC();
    
        //    glutMainLoop函数负责处理所有操作系统特定的消息、按键动作等直到我们关闭程序
        glutMainLoop();
        return 0;
    
    }

    运行结果:

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/maluning/p/8603119.html
Copyright © 2011-2022 走看看