一、搭建环境
1.1 环境准备:
- 开发环境:Mac OS、Xcode 11+
- OpenGL 工具包(会在本文末尾提供)
- include 文件夹
- libGLTools.a 静态文件
1.2创建项目
注意,我们使用Mac 应用来熟悉OpenGL
1.3 添加库
这里需要添加的是GLUT和OpenGL,这些都是苹果内置的。
步骤:在Build Phrases - Link Binary With Libraries 里,点击加号后,搜索GLUT 和OpenGL添加,如下图:
1.4 引入第三方库
- 将文件包内的
include
文件夹里拖入拷贝至工程内
- 把静态库
libGTools.a
拖入Framework 文件夹下
- 结果的文件夹结构如下:
1.5 单独引用 GLTools.h 和glew.h:
具体操作:在Build Phrases —— Complie Sources 添加GLTools.h 和glew.h文件。
结果如下:
1.6 删掉多余代码:
需要删除的有:
* AppDelegate.h
* AppDelegate.m
* ViewController.h
* ViewController.m
* Main.stroyboard
* main.m
目录如图所示:
1.7 添加启动文件 main.cpp
创建c++ 文件:
添加 main 文件,注意关掉创建头文件的对勾
创建基础代码,如下:
int main(int argc, char * argv[]) { return 0; }
至此,本Demo 已经可以独立运行了
二、扩展:绘制三角形
2.1 业务代码
上面的环境搭建好了,何不来个小小的Demo 来验证一下,输入业务代码如下:
#include "GLTools.h"
#include <GLUT/GLUT.h>
GLBatch triangleBatch;
GLShaderManager shaderManager;
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
void SetupRC()
{
glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
shaderManager.InitializeStockShaders();
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
};
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
glutSwapBuffers();
}
int main(int argc, char * argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
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();
glutMainLoop();
return 0;
}
2.2 小bug 解决
运行后发现会出现如下bug,
这里提示的是饮用方式的不对,修改根据提示修改,结果如下:
其他的错误提示也算大同小异,也一样的根据系统提示做修改。
2.3 结果展示
最终结果如下:
在这里画了一个简单的三角形,并用红色进行和内部渲染。
三、小结
本文介绍了OpenGL环境搭建,并简单的通过业务代码创建了一个红色三角形,由于是初次接触,内部的语法不妨略过,享受一下结果,会在以后的章节进行步骤的详细讲解。
- 附:Demo的 Github下载