OpenGL ES 入门之旅(1)--OpenGL 环境搭建(Mac)

1,719 阅读3分钟

1.搭建之前的准备工作

首先需要以下文件和静态库:

  1. glew
  2. CLTools
  3. libGLTools 现已经将所需资源放在百度网盘,请自行获取:链接: pan.baidu.com/s/14djgsQGc… 提取码: jesw

2.开始搭建环境

1.创建工程

首先创建一个新工程,下一步选择Cocoa App,

Cocoa App.png
然后自定义工程名,完成新工程的创建。

2.导入文件

将资源包里的include文件夹和libGLTools.a静态库导入

导入文件.png
同时设置文件路径
设置路径.png
注意将libGLTools.a放到Framework下面,
静态库.png

3.添加库

添加系统库: GLUT.framework OpenGL.framework

添加库.png

4.创建main.cpp

先将AppDelegate,ViewController,main文件删除,然后选择创建新文件

创建main.png
同时将文件命名为main,并去掉勾选的创建头文件
命名.png

5.测试环境

下面是借鉴老师的测试代码:

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

GLBatch triangleBatch;

GLShaderManager shaderManager;

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

//为程序作一次性的设置
void SetupRC() {
    //设置背影颜色
    glClearColor(1.0f,1.0f,0.0f,0.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[] = {0.0f,0.0f,1.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]);
    
    //初始化GLUT库
    glutInit(&argc, argv);
    
    /*初始化双缓冲窗口,其中标志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分别指
     双缓冲窗口、RGBA颜色模式、深度测试、模板缓冲区*/
    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
    
    //GLUT窗口大小,标题窗口
    glutInitWindowSize(800,600);
    
    glutCreateWindow("Triangle");
    
    //注册回调函数
    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;
}

运行结果如下:

测试结果.png

在这里有几个疑问?

  1. 运行成功之后,显示的窗口是黑屏,需要将窗口最小化,再次打开才可以正常显示?

  2. 同样是黑屏,需要将窗口最大化才可以看到这个蓝色的三角形,缩放到正常窗口之后还是黑屏?

  3. 在拖动显示窗口进行缩放的时候,显示的三角形会不停的闪烁,直到停止拖动窗口?

后续搞清楚原因之后再回来解答。 出现上述问题可能是Xcode版本过高,或者是Mac系统版本高导致的,据说在Xcode9.0下不会出现上述问题。当然这只是原因之一,还有可能跟changeSize这个函数有关,这个函数会在第一次创建窗口的时候,会在窗口大小改变,接收新的宽高的时候这两种情况下调用,所以出现上述情况的时候,可以尝试改变窗口的大小。(亲测有效)