OpenGL在Mac環(huán)境的配置

OpenGL(Open Graphics Library)是用于渲染2D、3D矢量圖形的應(yīng)用程序編程接口(API),它具有跨編程語言、跨平臺的特性。

不同于Linux和Windows,OpenGL在macOS的配置非常簡單,因?yàn)閙acOS中已經(jīng)集成了OpenGL,它會隨著系統(tǒng)的更新而更新。對于開發(fā)者來講,還需要一些其它的開發(fā)工具,而這些都集成到了Xcode中,因此OpenGL在macOS環(huán)境中的配置只需要

  • Xcode (可直接通過AppStore安裝)
  • 庫文件: CLTools / glew / libGLTools.a

庫文件我已上傳云盤
下載鏈接: https://pan.baidu.com/s/12WbB-C3d3Mn2wMeuJ0FS-A
提取碼: jf6x

現(xiàn)在開始配置OpenGl 環(huán)境,我的配置環(huán)境為:

  • Xcode 11.5
  • macOS Catalina 10.15.4

1.新建一個(gè)xcode工程

  1. 打開Xcode
  2. 選中Create a new Xcode project
image

2.選擇新建一個(gè)macOS APP

  1. 選擇macOS
  2. 選擇Application -> APP(創(chuàng)建一個(gè)cocaAPP)
image

3.添加依賴庫

  1. 選中工程文件
  2. 選中Targets下的new_opengl
  3. 選中Build Phases
  4. 展開Link Binary With Libraries
  5. 點(diǎn)擊左下角 “+” 按鈕,在彈出的對話框中分別選中 OpenGl.frameworkGLUT.framework
image
image

3.添加 CLTools.h ,glew.h

  1. 將下載好的庫文件中的include文件夾直接拖進(jìn)工程,期間會有提示,記得勾選 Copy items if needed
  2. Build SettingsSearch PathsHeader Search Paths中配置頭文件路徑,該路徑為 include路徑
image

4.添加libGLTools.a

  1. 將下載好的文件目錄中的 libGLTools.a 文件拖入到工程中的Frameworks中
  2. Xcode會自動填充libGLTools.a路徑到 Library Search Paths中,手動到 Build SettingsSearch PathsLibrary Search Paths 中檢查系統(tǒng)是否添加成功
image

5.刪除 AppDelegate.hAppDelegate.m、main.m 、ViewController.hViewController.m 因?yàn)槲覀兿乱徊綍胢ain.cpp替代

image

6.新建一個(gè)main.cpp

image

7.創(chuàng)建一個(gè)程序入口,并導(dǎo)入頭文件,編譯執(zhí)行,若能通過,說明配置成功

image

8.運(yùn)行一個(gè)DEMO

  1. 在main.cpp中,寫入以下代碼并執(zhí)行
#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,1.0f,1.0f,0.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,1.0f,1.0f};
    
    //傳遞到存儲著色器,即GLT_SHADER_IDENTITY著色器,這個(gè)著色器只是使用指定顏色以默認(rèn)笛卡爾坐標(biāo)第在屏幕上渲染幾何圖形
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
    
    //提交著色器
    triangleBatch.Draw();
    
    //將在后臺緩沖區(qū)進(jìn)行渲染,然后在結(jié)束時(shí)交換到前臺
    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;
}

最后運(yùn)行成功,查看效果圖

demo.png

大功告成

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

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