//oepngl库
opengl原生库 gl*
随opengl一起发布
opengl实用库 glu*
随opengl一起发布
opengl实用工具库glut glut*
需要下载配置安装(太老了!)
opengl实用工具库开源版本freeglut glut*
需要下载配置安装(完全兼容glut,算是glut的代替品,但是bug较多!)
opengl GLFW库 glfw*
需要下载配置安装(轻量级的,开源的,跨平台的library,新技术)
opengl GLEW库 glew*
需要下载配置安装
跨平台的C++扩展库,它的出现是为了方便的管理平台与opengl版本不匹配,以及方便的解决不同显卡特有的硬件接口支持。
只要包含一个glew.h头文件,你就能使用gl,glu,glext,wgl,glx的全 部函数。
opengl核心文件加载库gl3w gl3w*
gl3w是获取OpenGL核心配置文件规范所提供功
能的最简单方法。
opengl库glad glad*
基于官方规格的多语言GL / GLES / EGL / GLX / WGL装载机 - 生成器。
一般结合GLFW使用。
准备工作:
- brew
- cmake
一、下载glew,GLTools库
1.打开终端输入指令下载glew,cmake,
brew install glew
brew install cmake
注:使用Homebrew安装应用的时候可能会出现:
Error: The following directories are not writable by your user:
/usr/local/include
/usr/local/lib
/usr/local/lib/pkgconfig
这是权限问题导致的,解决方式是收回权限,就可以正常的安装下载:
sudo chown -R $(whoami) /usr/local/include /usr/local/lib /usr/local/lib/pkgconfig
2.安装成功后可以去 /usl/local/Cellar/glew目录下找到glew文件:
3.cd到指定目录,下载GLTools库
git clone https://github.com/HazimGazov/GLTools.git
4.下载好的GLTools的inlude目录下的头文件拷贝到到glew的include中,将两个库的头文件放在一起。
配置好的include:
二、配置文件路径
1.新建Xcode项目,选择macOS->App(创建过程中选择语言用默认的swift即可,之后会创建cpp文件)
2.项目名->Build Phases->Link Binary With Libraries(0items) -> + 添加系统库OpenGL.framework GLUT.framework
3.将之前下载好的GLTools.a和glew的include文件导入当前项目。File->Add Files to "xxx"...->两个文件的地址
4.配置文件路径
项目名-> Building Settings -> Search Paths -> Header Search Paths -> include的路径;
项目名-> Building Settings -> Search Paths -> Library Search Paths -> libGLTools.a的路径。
注:项目中include文件要和libGLTools.a文件处于同一目录下,否则会编译错误。
5.删除系统生成的OC文件,如图
6.新建main.cpp文件。
测试代码
#include <stdio.h>
#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);
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;
}
生成效果: