OpenGL环境配置(包括GLTools)
1.新建一个mac工程
GLTools(包含了大部分CLTools类中的C语言独立函数) glew(跨平台的C++扩展库,基于OpenGL图形接口,只要包含一个glew.h头文件,就能使用gl,glu,glext,wgl,glx的全部函数,支持目前流行的各种操作系统(including Windows, Linux, Mac OS X, FreeBSD, Irix, and Solaris) libGLTools.a
2.添加framework
添加GpenGL.framework 和GLUT.framework两个系统库
3.添加GLTools
在工程中拖入include文件夹,和libGLTools.a文件 在Bulid Settings的Header Search path中拖入GLTool.h,glew.h
4.创建main.cpp文件
删除项目中原来的AppDelegate.h和AppDelegate.m以及main.m,添加自己的main.cpp文件;
渲染一个三角形
1.初始化
//初始化GLUT库
glutInit(&argc, argv);
/*初始化双缓冲窗口
GLUT_DOUBLE 双缓冲窗口
GLUT_RGBA RGBA颜色模式
GLUT_DEPTH 深度测试
GLUT_STENCIL 模板缓冲区*/
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
2.创建窗口
//GLUT窗口大小、窗口标题
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
3.注册重塑与显示函数
//注册重塑函数
glutReshapeFunc(changeSize);
//注册显示函数
glutDisplayFunc(RenderScene);
/*
在窗口大小改变时,接收新的宽度&高度。
*/
void changeSize(int w,int h)
{
/*
x,y 参数代表窗口中视图的左下角坐标,而宽度、高度是像素为表示,通常x,y 都是为0
*/
glViewport(0, 0, w, h);
}
void RenderScene(void)
{
//1.清除一个或者一组特定的缓存区
/*
缓冲区是一块存在图像信息的储存空间,红色、绿色、蓝色和alpha分量通常一起分量通常一起作为颜色缓存区或像素缓存区引用。
OpenGL 中不止一种缓冲区(颜色缓存区、深度缓存区和模板缓存区)
清除缓存区对数值进行预置
参数:指定将要清除的缓存的
GL_COLOR_BUFFER_BIT :指示当前激活的用来进行颜色写入缓冲区
GL_DEPTH_BUFFER_BIT :指示深度缓存区
GL_STENCIL_BUFFER_BIT:指示模板缓冲区
*/
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//2.设置一组浮点数来表示红色
GLfloat vRed[] = {1.0,0.0,0.0,0.5f};
//传递到存储着色器,即GLT_SHADER_IDENTITY着色器,这个着色器只是使用指定颜色以默认笛卡尔坐标第在屏幕上渲染几何图形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//提交着色器
triangleBatch.Draw();
//在开始的设置openGL窗口的时候,我们指定要一个双缓冲区的渲染环境。
//这就意味着将在后台缓冲区进行渲染,渲染结束后交换给前台。
//这种方式可以防止观察者看到可能伴随着动画帧与动画帧之间的闪烁的渲染过程。缓冲区交换平台将以平台特定的方式进行。
//将后台缓冲区进行渲染,然后结束后交换给前台
glutSwapBuffers();
}
4.初始化一个GLEW库
GLenum status = glewInit();
if (GLEW_OK != status) {
printf("GLEW Error:%s\n",glewGetErrorString(status));
return 1;
}
5.设置渲染环境
//设置我们的渲染环境
setupRC();
void setupRC()
{
//设置清屏颜色(背景颜色)
glClearColor(0.2f, 0.2f, 0.2f, 1);
//没有着色器,在OpenGL 核心框架中是无法进行任何渲染的。初始化一个渲染管理器。
shaderManager.InitializeStockShaders();
//指定顶点
//在OpenGL中,三角形是一种基本的3D图元绘图原素。
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();
}
6.进入GLUT事件处理循环
glutMainLoop();
7.运行效果
最后
这是OpenGL的一个Hello world项目。