OpenGL在Mac上環(huán)境的搭建

最近一段時間都忙于公司項目的開發(fā),也沒有對于自己的工作學(xué)習(xí)進行總結(jié),感覺個人發(fā)展陷入了一個泥沼期?,F(xiàn)在公司的項目也進入了一個收尾階段,之后一段時間會進行OpenGL的學(xué)習(xí),也會通過簡書進行學(xué)習(xí)記錄。文章不足之處,歡迎指正。(一段廢話,建議忽略 )

OpenGL的描述跟概念這里不做贅述,相信大家都了解,下面開始:

在開始進行OpenGL環(huán)境搭建之前,要先了解下這門語言的特點:

OpenGL是一個跨語言和跨平臺的圖形編程接口,與GPU進行交互,不同的顯卡廠商負(fù)責(zé)具體實現(xiàn)(特指安卓,蘋果是統(tǒng)一的顯卡廠商),因此實現(xiàn)的具體程序也不盡相同。不同的廠商實現(xiàn)的庫可能有所不同,有的函數(shù)可能沒有實現(xiàn),有的包含拓展的實現(xiàn),而且廠商的實現(xiàn)一般通過動態(tài)鏈接庫來提供。

這些細(xì)節(jié)比較繁瑣,所以我們在開發(fā)之前需要先搭建OpenGL環(huán)境(---種菜總得先犁個地吧---),導(dǎo)入第三方庫文件,來幫我們處理這些操作。

本文會在搭建成功環(huán)境之后實現(xiàn)一個三角形的繪制,附上成功的截圖:

WX20180210-155222@2x.png

一.前期資源準(zhǔn)備

GLFW

CLTools

libGLTools.a

方法一:從github上下載 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)備好放入項目中。

4.下載GLtools庫。

GLTools下載地址

也可在終端,cd 到目的文件夾,使用git指令來進行下載。

git clone https://github.com/HazimGazov/GLTools.git

方法二:在本文的示例demo中有所需的glew、GLtools 庫文件了,可以直接從demo項目文件中拉取過去。
demo下載地址

二.開始配置openGL環(huán)境

1.打開XCode->macOS -> Cocoa App,創(chuàng)建一個mac項目

image

2.選中項目文件 Build Phases -> Link Binary With Libraries,添加OpenGL.framework、GLUT.framework兩個系統(tǒng)庫

image

3.添加CLTools.h、glew.h(在成功demo中都放置在include文件夾中,直接導(dǎo)入include文件夾即可)、libGLTools.a文件。同時在 Bulid Settings 搜索 Header Search path 直接拖入include文件夾生成路徑。

image
image

4.刪除系統(tǒng)生成的OC文件,AppDelegate.h、AppDelegate.m、main.m、ViewController.h、ViewController.m,創(chuàng)建main.cpp文件,同時把libGLTools.a文件拖入Framework文件夾中,便于管理。

image
image
image

至此,OpenGL環(huán)境已經(jīng)配置完成,下面開始在main.cpp文件里面寫代碼:

#include <stdio.h>

#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;

}

運行代碼,完美運行。

三.運行錯誤的解決

WX20180210-170441@2x.png

如果出現(xiàn)了以上的錯誤,是因為.a文件的存放位置問題。include文件夾跟.a文件必須存放在同一個目錄層級下。


WX20180210-170552@2x.png

既然看到這里了,點了喜歡再走唄?。?!-

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

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,045評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,564評論 19 139
  • 前10大編程語言你會幾種?-搜狐 http://mt.sohu.com/20160828/n466428160....
    葡萄喃喃囈語閱讀 2,399評論 0 2
  • 我活到現(xiàn)在做了很多蠢事以及錯事,當(dāng)然以后肯定還會接著做。雖是蠢錯事,但后悔的少,除了小時候外面慫窩里橫這點。 可同...
    淇水采芹人閱讀 507評論 0 4
  • 題目 折紙活動中,有一張如圖所示的等腰三角形紙片,底邊長15厘米,底邊上的高的22.5厘米,現(xiàn)在沿著底邊依次從下往...
    追沐閱讀 532評論 0 0

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