OpenGL--环境配置

227 阅读2分钟

一.OpenGL编程环境配置

1.提前准备三个文件:

libGLTools.a
GLTools
GLNew

2.打开Xcode创建一个macOS项目,将准备好的三个文件导入项目中(注意这里直接导入项目中就可以,不用导入到Frameworks文件中,导入Frameworks中可能报错)。

3.导入GLUT.Framework和OpenGL.Framework两个系统库来自支持。(如下图)

4.将AppDelegate和ViewController文件删除,然后将main.m删除创建一个macOS文件:

选择C++.File创建出一个cpp文件。或者不用删除main.m文件,直接将main.m改成main.mm也可以编写c++。

5.在main.cpp(或者main.mm)文件导入:

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

6.在main.cpp(或者main.mm)文件中编写如下代码,用来测试OpenGL环境配置是否成功:

GLBatch triangleBatch;
GLShaderManager shaderManager;
//GLTriangleBatch


/// 窗口大小改变接受新的宽度和高度,其中0,0代表窗口中左下角坐标位置,w,h代表像素
void ChangeSize(int w,int h) {
    
    glViewport(0, 0, w, h);
}

/// 为程序作一次性设置
void SetUpRC () {
    
    //设置背景颜色
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
    
    //初始化着色管理器
    shaderManager.InitializeStockShaders();
    
    //设置三角形,其中数组vVert包含所有3个定点 x,y卡迪尔坐标对。
    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};
    
    //传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标在屏幕上渲染几何图形
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
    
    //提交着色器
    triangleBatch.Draw();
    
    //将后台缓冲区进行渲染,然后在结束时交换到前台
    glutSwapBuffers();
}

///
int main(int argc,char * argv[]) {
    
    //设置当前工作目录,针对MAC OS x
    
    gltSetWorkingDirectory(argv[0]);
    
    //初始化GLUI库
    
    glutInit(&argc, argv);
    
    //
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    
    
    glutInitWindowSize(800, 600);
    
    
    glutCreateWindow("Triangle");
    
    //注册回调函数
    
//    glutReshapeFunc(ChangeSize(0, 0));
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
    
    GLenum err = glewInit(); if(GLEW_OK != err) {
        fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
        return 1;
    }
    
    // 调用 SetUpRC
    SetUpRC();
    glutMainLoop();
    
    return 0;
}

7.运行编写后的项目,结果如下:

运行结果是一个三角形,环境配置成功。