OpenGL學習筆記:第一個OpenGL程序 VS2015下OpenGL庫的配置

  OpenGL環境搭建參考博客:VS2015下OpenGL庫的配置html

#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;

}

運行結果:數組

相關文章
相關標籤/搜索