OpenGL学习笔记:第一个OpenGL程序

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

#include<GL\glew.h>
#include<GLTools.h>
#include<GLShaderManager.h>

#ifdef __APPLE__
#include<GL\glut.h>
#else
#define FREEGLUT_STATIC
#include<GL\glut.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\n", glewGetErrorString(err));
        return 1;
    }

    SetupRC();

    //    glutMainLoop函数负责处理所有操作系统特定的消息、按键动作等直到我们关闭程序
    glutMainLoop();
    return 0;

}

运行结果:

posted @ 2018-03-19 16:50  !Vincent  阅读(1070)  评论(0编辑  收藏