OpenGL 环境搭建

1.OpenGL 简介

OpenGL是一种用于创建实时3D图像的编程接口。

OpenGL(全写Open Graphics Library “开放的图形程序接口”)是指定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口。它用于三维图像(二维的亦可),是一个功能强大,调用方便的底层图形库。

OpenGL 的发展

OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL,为解决其移植性差的缺点OpenGL应运而生。虽然微软的DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。Direct3D目前还不能支持高端的图形设备和专业应用, OpenGL在这些领域占据着统治地位。OpenGL因其独立的平台无关的三维图形开发库的特性,在游戏开发高端图形绘制方面深受开发者的喜爱。具体信息大家可以去官网查看OpenGL官网

版本历程

1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。

1995年OpenGL的1.1版本面市,改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。

2003年的7月28日,SGI和ARB公布了OpenGL 1.5,包括OpenGL ARB的正式扩展规格绘制语言“OpenGL Shading Language”。新功包括:顶点Buffer Object、Shadow功能、隐蔽查询、非乘方纹理等。

2004年8月,OpenGL2.0版本发布~OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。OpenGL2.0支持OpenGL Shading Language、新的shader扩展特性以及其他多项增强特性。

2008年8月初Khronos工作组在Siggraph 2008大会上宣布了OpenGL 3.0图形接口规范,GLSL1.30 shader语言和其他新增功能将再次对未来开放3D接口发展指明方向。

2009年3月又公布了升级版新规范OpenGL 3.1,OpenGL 3.1在3.0版的基础上对整个API模型体系进行了简化,可大幅提高软件开发效率。

2009年8月Khronos小组发布了OpenGL 3.2,提升了性能表现、改进了视觉质量、提高了几何图形处理速度,而且使Direct3D程序更容易移植为OpenGL。

2010年7月26日发布OpenGL 4.1和OpenGL OpenGL Shading Language 4.10。OpenGL4.1提高视觉密集型应用OpenCL™的互操作性,并继续加速计算剖面为核心的支持和兼容性第一次推出的OpenGL 3.2,使开发人员能够使用一个简化的API或保留向后兼容现有的OpenGL代码,这取决于他们的市场需求。

2011年8月9日在温哥华举行的SIGGRAPH 2011大会上Khronos发布了新的OpenGL 4.2标准细节,对于支持现有硬件的API加入了部分新的支持特性。

经过前辈们的不断完善和更新,如今OpenGL已经更新到了 OpenGL 4.6(2017 - 07 -30)OpenGL Shading Language 4.60(2017 - 07 - 23)。

OpenGL 在xcode上环境搭建

1.安装流程

1.打开Xcode (安装xcode为9.1)->macOS -> Cocoa App


2.添加 OpenGl.framework GLUT.framework系统库。


3.添加include 文件 和 libGLTool.a文件。并在BuildSettings -> Header -> Search -> Paths 中添加.a 文件的路径。



4.删除 AppDelegate.h .m Viewcontroller.h .m main.m文件,这边要替换main函数入口,不然程序运行是从main函数进入然后执行runloop循环交由AppDelegate执行的。所以这一套都得删除,替换成我们要使用的main函数接口。


5.创建替换mian函数,创建c++文件,勾掉.h.


6.copy以下代码在main函数里面。

#include "GLTools.h"

#include <glut/glut.h>

#include "GLShaderManager.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);

//驱动程序的初始化中没有出现任何问题。

GLenum err = glewInit();

if(GLEW_OK != err) {

fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));

return 1;

}

//调用SetupRC

SetupRC();

glutMainLoop();

return 0;

}

7.运行程序出现以下界面就说明你成功了。




2.报错处理

以上流程可能会出现一些错误,这边列举本人碰到的一些问题及解决方法。

1.头文件报错

因为是直接把文件拉进来,而文件内默认是以framework形式导入的所以这边要将<>换成“”,可以根据系统提示直接点fix就可以。


2.文件路径报错.a文件找不到。

这边错误原因是BuildSettings -> hearder search path 中引入的路径错误。.a文件要放在工程文件下面,在引入路径种必须有工程名字然后才是.a名字。这边有个很好简书类似错误处理方法的文章推荐给大家点我跳转。以下错误可能是先直接拖进来然后又换了文件位置导致的。




最后附上本人成功Demo一个https://github.com/ClementGu/GJ_OpenGL_ConfigDemo,如需资源可以去OpenGL官网下载。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,667评论 5 472
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,361评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,700评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,027评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,988评论 5 361
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,230评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,705评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,366评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,496评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,405评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,453评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,725评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,803评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,015评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,514评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,111评论 2 341

推荐阅读更多精彩内容