零、Mac 搭建OpenGL 環(huán)境

OpenGL + OpenGL ES +Metal 系列文章匯總

一、準(zhǔn)備工作

需要準(zhǔn)備一下資源

1、CLTools

2、glew

3、libGLTools.a

以上資源,可在百度云下載:

鏈接:https://pan.baidu.com/s/1ytMI09aSkduC-8kFKVDmvQ 密碼:khgu

二、OpenGL 環(huán)境配置

1、xcode -> File -> New -> Project -> MacOS -> App,命名為 OpenGL 環(huán)境搭建

image

2、刪除項目中的 Appdelegate.h、Appdelegate.m 、ViewController.h、ViewController.m、main.m文件

注:項目是由c++語言編寫,并不需要這些OC文件

image

3、添加系統(tǒng)依賴庫:target -> Build Phases -> Link Binary With Libraries 中添加OpenGL.framework 和 GLUT.framework

image

4、導(dǎo)入準(zhǔn)備的資源包

1)將include文件夾拖到項目中

image

2)將libGLTools.a文件拖入到項目的Framework文件夾中

image

5、在 target -> Build Settings -> Header Search Path中添加include的路徑: "$(SRCROOT)/OpenGL 環(huán)境搭建/include"

image

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

image
image

7、在main.cpp文件中拷入以下測試代碼


#include "GLShaderManager.h"

#include "GLTools.h"

#include <GLUT/GLUT.h>

//定義一個,著色管理器

GLShaderManager shaderManager;

//簡單的批次容器,是GLTools的一個簡單的容器類。

GLBatch triangleBatch;

/*

在窗口大小改變時,接收新的寬度&高度。

*/

void changeSize(int w,int h)

{

    glViewport(0, 0, w, h);

}

void RenderScene(void)

{

    //1.清除一個或者一組特定的緩存區(qū)

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);

    //2.設(shè)置一組浮點數(shù)來表示紅色

    GLfloat vRed[] = {1.0,0.0,0.0,1.0f};

    //傳遞到存儲著色器,即GLT_SHADER_IDENTITY著色器,這個著色器只是使用指定顏色以默認(rèn)笛卡爾坐標(biāo)第在屏幕上渲染幾何圖形

    shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);

    //提交著色器

    triangleBatch.Draw();

    //將后臺緩沖區(qū)進行渲染,然后結(jié)束后交換給前臺

    glutSwapBuffers();

}

void setupRC()

{

    //設(shè)置清屏顏色(背景顏色)

    glClearColor(0.98f, 0.40f, 0.7f, 1);

    //沒有著色器,在OpenGL 核心框架中是無法進行任何渲染的。初始化一個渲染管理器。

    //在前面的課程,我們會采用固管線渲染,后面會學(xué)著用OpenGL著色語言來寫著色器

    shaderManager.InitializeStockShaders();

    //指定頂點

    //在OpenGL中,三角形是一種基本的3D圖元繪圖原素。

    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();

}

int main(int argc,char *argv[])

{

    //初始化GLUT庫,這個函數(shù)只是傳說命令參數(shù)并且初始化glut庫

    glutInit(&argc, argv);

    /*

    初始化雙緩沖窗口,

    */

    glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL);

    //GLUT窗口大小、窗口標(biāo)題

    glutInitWindowSize(800, 600);

    glutCreateWindow("Triangle");

    /*

    GLUT 內(nèi)部運行一個本地消息循環(huán),攔截適當(dāng)?shù)南ⅰH缓笳{(diào)用我們不同時間注冊的回調(diào)函數(shù)。

    */

    //注冊重塑函數(shù)

    glutReshapeFunc(changeSize);

    //注冊顯示函數(shù)

    glutDisplayFunc(RenderScene);

    /*

    初始化一個GLEW庫,確保OpenGL API對程序完全可用。

    在試圖做任何渲染之前,要檢查確定驅(qū)動程序的初始化過程中沒有任何問題

    */

    GLenum status = glewInit();

    if (GLEW_OK != status) {

        printf("GLEW Error:%s\n",glewGetErrorString(status));

        return 1;

    }

    //設(shè)置我們的渲染環(huán)境

    setupRC();

    glutMainLoop();

    return  0;

}

運行效果如下:

image

到此,OpenGL基本環(huán)境就搭建完成啦!??ヽ(°▽°)ノ?

?著作權(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ù)。

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