Powered by md-Blog  文 - 篇  访客 -

OpenGL Mac环境搭建 - 04


  分类:OpenGL学习  / 
更新:2020-07-24 09:50:15  /  创建:2020-02-23 23:44:11
不要删除

OpenGL Mac环境搭建 - 04

因为本身是做iOS开发出身,所以就直接利用Xcode来搭建OpenGL 项目环境了;

所需的头文件和静态库

文件下载地址:https://github.com/JarhomChen/OpenGL-tools-And-glew

1、GLUT

GLUT库相当于是OpenGL的实用工具箱,包括创建窗口,弹出式菜单,窗口管理等等。值在Windows中,GLUT的开发已经中断,现有的一个叫做freeglut的函数库已经取代了它的位置,我的蓝宝书教程用的也都是freeglut函数库。但是因为Xcode的library可以直接添加GLUT.framework,所以我这边安装的环境也是使用的GLUT库。

2、GLEW 与 GLTools

在C/C++程序中使用OpenGL时,需要使用GLEW这样的第三方库来加载OpenGL函数。windows目前只支持OpenGL1.1的涵数,但 OpenGL现在都发展到2.0以上了,要使用这些OpenGL的高级特性,就必须下载最新的扩展,另外,不同的显卡公司,也会发布一些只有自家显卡才支持的扩展函数,你要想用这数涵数,不得不去寻找最新的glext.h,有了GLEW扩展库,你就再也不用为找不到函数的接口而烦恼,因为GLEW能自动识别你的平台所支持的全部OpenGL高级扩展涵数。也就是说,只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全部函数。

GLTools里封装了用于操作矩阵和向量的3D数学库,并且有默认的shader可以渲染简单的3D对象。

使用Xcode创建OpenGL项目环境

  • 打开Xcode->New Project->macOS->App

w1446

  • 添加 OpenGl.framework 和 GLUT.framework 两个系统库

w1401

  • 将GLEW与GLTools相关文件拖入项目中,也就是include文件夹和libGLTools.a文件

w777

  • Bulid Settings 中的Header Search path添加 CLTool.h 和 glew.h 的目录地址

w1340

  • 删除AppDelegate.h AppDelegate.m 和 main.m 等文件

w1430

  • 创建main.cpp文件并添加以下代码
#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(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]);
    
    //初始化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;
    
}

w1405
w793

  • 最后Command+R运行,如果无误便大功告成,下面是效果图

w1207


不要删除