一尾膊、準(zhǔn)備資源
? ? 1.CLTools
?? ?2.glew
? ? 3.libGLTools.a
二可免、開始配置openGL環(huán)境
? ?1牡拇、Xcode -> macOS -> Cocoa Application
創(chuàng)建一個(gè)mac程序
????2帚稠、在project->Build Phases->Link Binary With Libraries項(xiàng)中添加OpenGl.framework 和GLUT.framework兩個(gè)系統(tǒng)庫
導(dǎo)入兩個(gè)系統(tǒng)庫
3怎囚、添加?CLTools.h,glew.h
? ? ? 方法1:
添加文件到工程
選擇下載好的資源添加
? ? 將libGLTools.a庫放到Frameworks下
完成導(dǎo)入到工程
? ? 4卿叽、刪除工程中多余文件main.m、AppDelegate.h恳守、AppDelegate.m考婴、 ? ? ? ? ? ViewController.h、ViewController.m
? ? 5催烘、創(chuàng)建main.cpp文件
創(chuàng)建c++文件
創(chuàng)建main.m文件沥阱,不需要?jiǎng)?chuàng)建.h文件,去掉勾
創(chuàng)建main文件
? ? 6伊群、復(fù)制以下代碼到main.cpp中
#include "GLTools.h"#includeGLBatch triangleBatch;
GLShaderManager shaderManager;
//窗口大小改變時(shí)接受新的寬度和高度考杉,其中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個(gè)頂點(diǎn)的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) {
? ? //清除一個(gè)或一組特定的緩沖區(qū)
? ? glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
? ? //設(shè)置一組浮點(diǎn)數(shù)來表示紅色
? ? GLfloat vRed[] = {1.0f,0.0f,0.0f,1.0f};
? ? //傳遞到存儲(chǔ)著色器,即GLT_SHADER_IDENTITY著色器枕稀,這個(gè)著色器只是使用指定顏色以默認(rèn)笛卡爾坐標(biāo)第在屏幕上渲染幾何圖形
? ? shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
? ? //提交著色器
? ? triangleBatch.Draw();
? ? //將在后臺(tái)緩沖區(qū)進(jìn)行渲染询刹,然后在結(jié)束時(shí)交換到前臺(tái)
? ? 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ù)(這兩個(gè)函數(shù)有一個(gè)不注冊,窗口就彈不起來斟叼,因?yàn)樵趩?dòng)的一瞬間也是需要調(diào)用的偶惠,以后窗口或界面調(diào)用也會(huì)更改)
? ? glutReshapeFunc(ChangeSize);
? ? glutDisplayFunc(RenderScene);
? ? //驅(qū)動(dòng)程序的初始化中沒有出現(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;
}
? ? 7朗涩、將文件<>系統(tǒng)引入改為""普通引入忽孽,運(yùn)行
成功運(yùn)行起來
? ? 到此openGL環(huán)境搭建就完成了。
? 補(bǔ)充:個(gè)人在運(yùn)行時(shí)報(bào)了以下錯(cuò)誤
報(bào)錯(cuò)截圖
找不到gltools庫谢床,重新刪除再添加就可以了