一:資源準(zhǔn)備
方法一:自己從github上下載所需要的2個(gè)庫(kù)文件 glew和GLtools致讥。
1.安裝homebrew
/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
2.安裝cmake
執(zhí)行命令 ?brew install cmake
3.安裝glew
執(zhí)行命令 ?brew ?install ?glew ?安裝成功后可以去 /usl/local/Cellar/glew目錄下找到glew文件
把include頭文件和libGLEW.a準(zhǔn)備好放入項(xiàng)目中憎瘸。
4.去Github上下載GLtools庫(kù)富岳。(下載地址)
在終端中cd到github在本地指定到的本地git文件下輸入命令?
?git clone ? ?https://github.com/HazimGazov/GLTools.git
(因?yàn)槔率菦]有編譯過(guò)的文件類)如下圖所示
cd到這個(gè)build文件夾下罗心,運(yùn)行終端命令:
cd build
cmake ..
make
sudo make install
sudo ldconfig
便可以生成如下圖所示的.a庫(kù)
以上便是準(zhǔn)備好了 glew庫(kù)和GLtools庫(kù)。
方法二:?
?樓主已經(jīng)在把整合好的頭文件和.a庫(kù)github上的OpenGlShare文件下城瞎。請(qǐng)下載demo和資源
二:下面開始我們的環(huán)境配置
新建一個(gè)Xcode -> macOS -> Cocoa Application
添加OpenGl.framework GLUT.framework兩個(gè)系統(tǒng)庫(kù)
添加CLTools.h,glew.h
在Bulid Settings ?輸入Header Search path ?中拖入 ?CLTool.h? glew.h 生成路徑
libGLTools.a 直接拖到工程的Frameworks文件里面,另外刪除文件 AppDelegate.h AppDelegate.m main.m ViewController.h ViewController.m ; 創(chuàng)建C++文件 main.cpp
下面代碼編寫完成疾瓮,編譯后脖镀,會(huì)報(bào)錯(cuò)。需要將庫(kù)中<>系統(tǒng)引入,改為 “普通引入”
在main.cpp中寫入下面代碼蜒灰,編寫main入口程序
引入頭文件
#include "GLShaderManager.h"
#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)對(duì)翅溺。
? ? 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ù)來(lái)表示紅色
? ? 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)前工作目錄伊滋,針對(duì)MAC OS X
? ? gltSetWorkingDirectory(argv[0]);
? ? //初始化GLUT庫(kù)
? ? glutInit(&argc, argv);
? ? /*初始化雙緩沖窗口,其中標(biāo)志GLUT_DOUBLE昼浦、GLUT_RGBA座柱、GLUT_DEPTH物舒、GLUT_STENCIL分別指
? ? 雙緩沖窗口、RGBA顏色模式火诸、深度測(cè)試荠察、模板緩沖區(qū)*/
? ? glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);
? ? //GLUT窗口大小,標(biāo)題窗口
? ? glutInitWindowSize(800,600);
? ? glutCreateWindow("Triangle");
? ? //注冊(cè)回調(diào)函數(shù)
? ? 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;
}
運(yùn)行效果圖如下: