OpenGL 學(xué)習(xí) 01 - Mac 搭建 OpenGL 環(huán)境

(一)GLTools 和 glew 安裝

1. 安裝 homebrew(已安裝可跳過(guò))

homebrew 的官方網(wǎng)站: http://brew.sh/

在 Mac 中打開(kāi) Termal 并輸入以下命令進(jìn)行安裝 homebrew:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

下面是 homebrew 的一些命令:

  • brew search 搜索軟件包
  • brew install 安裝軟件包
  • brew uninstall 卸載軟件包
  • brew info 查詢軟件包信息
  • brew list 查詢已經(jīng)安裝的軟件包
  • brew update 更新
  • brew deps 顯示包依賴(lài)

2. 利用 homebrew 安裝 cmake(已安裝可跳過(guò))

安裝命令:

brew install cmake

如果一切正常就到下一步,這里可能報(bào)下面錯(cuò)誤:

Error: The brew link step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/man/man7/cmake-buildsystem.7
/usr/local/share/man/man7 is not writable.

解決方法:

sudo chown -R $(whoami) /usr/local
brew link cmake

3. 利用 homebrew 安裝 glew(已安裝可跳過(guò))

安裝命令:

brew install glew

安裝成功后,可以在 /usr/local/Cellar/glew/ 目錄下找到 glew 的各個(gè)版本的包,選擇一個(gè)版本進(jìn)去,會(huì)看到:

4. 編譯 gltools (已編譯可跳過(guò))

依次執(zhí)行以下命令:

$ git clone https://github.com/HazimGazov/GLTools
$ cd GLTools
$ cmake .
$ make 
$ sudo make install

進(jìn)入到 /usr/local/include/ 目錄下,可以看到 gltools 頭文件都已經(jīng)有了,在 /usr/local/lib/ 目錄下,libgltools.dylib 已生成完畢,????????大功告成

gltools 頭文件
gltools 鏈接庫(kù)

把所有需要的鏈接庫(kù)拷貝到一個(gè)文件夾中,方便我們導(dǎo)入到項(xiàng)目中:

(二)Xcode 項(xiàng)目環(huán)境搭建

1. 創(chuàng)建 Mac 項(xiàng)目

刪除項(xiàng)目中不需要的文件

2. 添加 .framework 包和 .dylib 鏈接庫(kù)

3. 配置鏈接庫(kù)頭文件路徑

配置 glew 和 gltools 路徑
我們還需要添加這些頭文件的路徑到項(xiàng)目中

4. 構(gòu)建程序入口

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

拷貝測(cè)試代碼到 main.cpp:

#include <iostream>
#include <GLShaderManager.h>
#include <GLTools.h>
#include <glut/glut.h>

GLBatch 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,
    };
    
    //開(kāi)始批次處理
    triangleBatch.Begin(GL_TRIANGLES, 3);
    //拷貝頂點(diǎn)數(shù)據(jù)
    triangleBatch.CopyVertexData3f(vVerts);
    //結(jié)束批次處理
    triangleBatch.End();
}

//開(kāi)始渲染
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);
    
    //初始化窗口大小
    glutInitWindowSize(800,600);
    //創(chuàng)建窗口
    glutCreateWindow("Triangle");
    
    //注冊(cè)回調(diào)函數(shù)
    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
    
    //確保驅(qū)動(dòng)程序的初始化中沒(méi)有出現(xiàn)任何問(wèn)題。
    GLenum err = glewInit();
    if(GLEW_OK != err) {
        fprintf(stderr, "glew error:%s\n", glewGetErrorString(err));
        return 1;
    }
    
    //初始化設(shè)置
    SetupRC();
    
    //進(jìn)入調(diào)用循環(huán)
    glutMainLoop();
    return 0;
}

現(xiàn)在,是時(shí)候來(lái)運(yùn)行一波看看效果了,O(∩_∩)O哈哈~:

搞了這么多,終于把 Mac 的 OpenGL 環(huán)境搭建好了,

??ヽ(°▽°)ノ??

??ヽ(°▽°)ノ??

這里是源碼:github->openGLDemo->01-environment

實(shí)際上,還有另外一種方法進(jìn)行配置,這里就不寫(xiě)了,具體可參考:
001--OpenGL在Mac 上的環(huán)境搭建(作者:CC老師_MissCC)

兩種方法對(duì)比起來(lái)的各有優(yōu)劣,我個(gè)人偏向于上面安裝 GLTools 和 glew 的方法,這樣如果 GLTools 或者 glew 那邊更新了,也可以很簡(jiǎn)單的進(jìn)行升級(jí)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容