一、準(zhǔn)備工作
需要準(zhǔn)備一下資源
1、CLTools
2、glew
3、libGLTools.a
以上資源,可在百度云下載:
鏈接:https://pan.baidu.com/s/1ytMI09aSkduC-8kFKVDmvQ 密碼:khgu
二、OpenGL 環(huán)境配置
1、xcode -> File -> New -> Project -> MacOS -> App,命名為 OpenGL 環(huán)境搭建

image
2、刪除項目中的 Appdelegate.h、Appdelegate.m 、ViewController.h、ViewController.m、main.m文件
注:項目是由c++語言編寫,并不需要這些OC文件

image
3、添加系統(tǒng)依賴庫:target -> Build Phases -> Link Binary With Libraries 中添加OpenGL.framework 和 GLUT.framework

image
4、導(dǎo)入準(zhǔn)備的資源包
1)將include文件夾拖到項目中

image
2)將libGLTools.a文件拖入到項目的Framework文件夾中

image
5、在 target -> Build Settings -> Header Search Path中添加include的路徑: "$(SRCROOT)/OpenGL 環(huán)境搭建/include"

image
6、創(chuàng)建main.cpp文件

image

image
7、在main.cpp文件中拷入以下測試代碼
#include "GLShaderManager.h"
#include "GLTools.h"
#include <GLUT/GLUT.h>
//定義一個,著色管理器
GLShaderManager shaderManager;
//簡單的批次容器,是GLTools的一個簡單的容器類。
GLBatch triangleBatch;
/*
在窗口大小改變時,接收新的寬度&高度。
*/
void changeSize(int w,int h)
{
glViewport(0, 0, w, h);
}
void RenderScene(void)
{
//1.清除一個或者一組特定的緩存區(qū)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
//2.設(shè)置一組浮點數(shù)來表示紅色
GLfloat vRed[] = {1.0,0.0,0.0,1.0f};
//傳遞到存儲著色器,即GLT_SHADER_IDENTITY著色器,這個著色器只是使用指定顏色以默認(rèn)笛卡爾坐標(biāo)第在屏幕上渲染幾何圖形
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
//提交著色器
triangleBatch.Draw();
//將后臺緩沖區(qū)進行渲染,然后結(jié)束后交換給前臺
glutSwapBuffers();
}
void setupRC()
{
//設(shè)置清屏顏色(背景顏色)
glClearColor(0.98f, 0.40f, 0.7f, 1);
//沒有著色器,在OpenGL 核心框架中是無法進行任何渲染的。初始化一個渲染管理器。
//在前面的課程,我們會采用固管線渲染,后面會學(xué)著用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();
}
int main(int argc,char *argv[])
{
//初始化GLUT庫,這個函數(shù)只是傳說命令參數(shù)并且初始化glut庫
glutInit(&argc, argv);
/*
初始化雙緩沖窗口,
*/
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
//GLUT窗口大小、窗口標(biāo)題
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
/*
GLUT 內(nèi)部運行一個本地消息循環(huán),攔截適當(dāng)?shù)南ⅰH缓笳{(diào)用我們不同時間注冊的回調(diào)函數(shù)。
*/
//注冊重塑函數(shù)
glutReshapeFunc(changeSize);
//注冊顯示函數(shù)
glutDisplayFunc(RenderScene);
/*
初始化一個GLEW庫,確保OpenGL API對程序完全可用。
在試圖做任何渲染之前,要檢查確定驅(qū)動程序的初始化過程中沒有任何問題
*/
GLenum status = glewInit();
if (GLEW_OK != status) {
printf("GLEW Error:%s\n",glewGetErrorString(status));
return 1;
}
//設(shè)置我們的渲染環(huán)境
setupRC();
glutMainLoop();
return 0;
}
運行效果如下:

image
到此,OpenGL基本環(huán)境就搭建完成啦!??ヽ(°▽°)ノ?