• 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;
    
    }

    运行结果:

  • 相关阅读:
    Python中的单例模式
    硬件资产管理系统总结
    浏览器同源策略之JSONP、CORS
    设置全局的csrf跨站请求伪造
    keystone命令与client接口学习
    实验室双显示屏安装使用记录
    redhat 5.4 下rabbitMQ单机安装.md
    Android Studio Connection refused: connect 错误解决
    Add Google Maven repository and sync project
    Java向上转型和向下转型
  • 原文地址:https://www.cnblogs.com/maluning/p/8603119.html
Copyright © 2020-2023  润新知