一、準(zhǔn)備資料
鏈接: https://pan.baidu.com/s/1VBxcFCi5Rg3VZslKHkx3LA 提取碼: qfv5
二、配置環(huán)境
1.新建Xcode工程 -> macOS -> Cocoa App,輸入工程名

圖.png

圖.png
2.在TARGETS里,點擊Build Phases,在Link Binary With Libraries里添加OpenGL.framework和GLUT.framework兩個庫

圖.png
3.拖入網(wǎng)盤下載的資料(include 文件夾和libGLTools.a)到工程中,記著要點選Copy items if needed,這樣在工程里才會復(fù)制一份

圖.png

圖.png
4.設(shè)置Header Search Paths的路徑,將include直接拖入即可

圖.png
5.刪除不需要的文件(Move to Trash),如下圖選中的那幾個

圖.png
6.創(chuàng)建一個C++文件,名為main

圖.png

圖.png
7.將代碼寫入到main.cpp中,編譯一下看是否成功
#include "GLShaderManager.h"
#include "GLTools.h"
#include <glut/glut.h>
GLBatch triangleBatch;
GLShaderManager shaderManager;
//窗口大小改變時接受新的寬度和高度,其中0,0代表窗口中視口的左下角坐標(biāo),w,h代表像素
void ChangeSize(int w,int h)
{
glViewport(0,0, w, h);
}
//為程序作一次性的設(shè)置
void SetupRC()
{
//設(shè)置背影顏色
glClearColor(0.0f,0.0f,1.0f,1.0f);
//初始化著色管理器
shaderManager.InitializeStockShaders();
//設(shè)置三角形,其中數(shù)組vVert包含所有3個頂點的x,y,笛卡爾坐標(biāo)對。
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)
{
//清除一個或一組特定的緩沖區(qū)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//設(shè)置一組浮點數(shù)來表示紅色
GLfloat vRed[] = {1.0f,0.0f,0.0f,1.0f};
//傳遞到存儲著色器,即GLT_SHADER_IDENTITY著色器,這個著色器只是使用指定顏色以默認(rèn)笛卡爾坐標(biāo)第在屏幕上渲染幾何圖形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//提交著色器
triangleBatch.Draw();
//將在后臺緩沖區(qū)進行渲染,然后在結(jié)束時交換到前臺
glutSwapBuffers();
}
int main(int argc,char* argv[])
{
//設(shè)置當(dāng)前工作目錄,針對MAC OS X
gltSetWorkingDirectory(argv[0]);
//初始化GLUT庫
glutInit(&argc, argv);
/*初始化雙緩沖窗口,其中標(biāo)志GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分別指
雙緩沖窗口、RGBA顏色模式、深度測試、模板緩沖區(qū)*/
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
//GLUT窗口大小,標(biāo)題窗口
glutInitWindowSize(800,600);
glutCreateWindow("Triangle");
//注冊回調(diào)函數(shù)
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
//驅(qū)動程序的初始化中沒有出現(xiàn)任何問題。
GLenum err = glewInit();
if(GLEW_OK != err) {
fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
return 1;
}
//調(diào)用SetupRC
SetupRC();
glutMainLoop();
return 0;
}
8.不出意外的話,Run功能,能看到一個藍色背景,紅色的三角形在窗口中,但是在日常開發(fā)中一般都會把.a庫放到Frameworks中統(tǒng)一管理

圖.png
9.然后再Run下,發(fā)現(xiàn)報錯了,library not found for -lGLTools,這個原因主要就是當(dāng)前的libGLTools.a的路徑,是工程代碼里的路徑,而非Frameworks里的路徑,我們需要在TARGETS里,點擊Build Phases,在Link Binary With Libraries里先刪除掉libGLTools.a,然后再通過Frameworks里的libGLTools.a重新拖入過去即可

圖.png
9.再Run一下,運行成功

圖.png