一、准备资源
1、GLTools
2、glew
3、libGLTools.a
二、创建OpenGLMac项目工程
1、创建工程 OpenGLMacDemo
路径: xCode -> macOS -> App 命名为OpenGLMacDemo
2、添加系统依赖库:
OpenGL.framework
GLUT.framework
3、导入sdk库 OpenGLSDK
1、将OpenGLSDK拖入工程中,并勾选Copy items if needed
2、Bulid Settings 设置
在Bulid Settings 输入HeaderSearch path 中输入:
$(PROJECT_DIR)/OpenGLMacDemo/OpenGLSDK/include
4、删除文件
AppDelegate.h
AppDelegate.m
Main.m
ViewController.h
ViewController.m
5、创建main.cpp文件
创建main.cpp文件,commond + N 调出创建文件页面 macOS -> c++ File -> 输入名称main, 去除勾选(Also create a header file)不创建头文件
6、输入代码
在main.cpp文件中输入以下代码
#include "GLTools.h"
#include
GLBatch triangleBatch;
GLShaderManager shaderManager;
// 窗口大小改变时接受新的宽度和高度,其中 0,0代表窗口中视口的左下角坐标,w,h 代表像素
void ChangeSize(int w, int h) {
glViewport(0, 0, w, h);
}
// 为程序作一次性的设置
void SetupRC() {
// 设置背影颜色,这里设置成白色
glClearColor(1.0f, 1.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 RenderSene(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]);
// 初始化GLTU库
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(RenderSene);
// 驱动程序的初始化中没有出现任何问题
GLenum err = glewInit();
if ( GLEW_OK != err ) {
fprintf(stderr, "glew error:%s\n", glewGetErrorString(err));
return 1;
}
// 调用SetupRC
SetupRC();
glutMainLoop();
return 0;
}