一、準備資源
- libGLTools.a
- CLTools
- glew
為方便大家,這里我已上傳到網(wǎng)盤中,網(wǎng)盤地址 提取碼: 9x2w
二、開始搭建
-
創(chuàng)建工程
openGL01.jpg -
選擇macOS App
openGL02.jpg
openGL03.jpg -
添加依賴庫
3.1. 在Build Phases 的 Link Binary With Libraries 中點擊添加,添加GLUT.framework 和 OpenGL.framework
openGL04.jpg -
配置路徑
4.1. 將include文件夾直接拖入項目工程中,將libGLTools.a 靜態(tài)庫直接拖入到項目的Frameworks中
4.2. 在Build Settings 中搜索Header Search, 在Header Search Paths 添加上include的路徑
openGL05.jpg
openGL06.jpg -
創(chuàng)建main.cpp
5.1. 創(chuàng)建一個c++ 類型的文件,命名為main,創(chuàng)建的時候去掉勾選同時創(chuàng)建頭文件
openGL07.jpg
openGL08.jpg -
刪除AppDelegate.h、AppDelegate.m、main.m、ViewController.h、ViewController.m
openGL09.jpg - 在main.cpp文件中 添加測試代碼
#include "GLShaderManager.h"
#include "GLTools.h"
#include <glut/glut.h>
GLBatch triangleBatch;
GLShaderManager shaderManager;
/**
1. 窗口大小改變時接受新的寬度和高度,其中0,0代表窗口中視口的左下角坐標,w,h代表像素
2. 處理業(yè)務
2.1. 設置OpenGL視口
2.2. 設置OpenGL投影方式
*/
void ChangeSize(int w, int h) {
glViewport(0, 0, w, h);
}
/** 為程序做一次性的設置 */
void SetupRC() {
/** 設置背影顏色 */
glClearColor(1.0f,1.0f,1.0f,0.0f);
/** 初始化著色管理器 */
shaderManager.InitializeStockShaders();
/** 設置三角形,其中vVertex包含所有3個頂點的x,y,z笛卡爾坐標對 */
GLfloat vVertex[] = {
-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(vVertex);
triangleBatch.End();
}
/** 開始渲染 */
void RenderScene(void) {
/** 清除一個或一組特定的緩沖區(qū) */
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
/** 設置一組浮點數(shù)表示顏色 */
GLfloat vRed[] = {1.0f,0.0f,0.0f,1.0f};
/** 傳遞到存儲著色器,即GLT_SHADER_IDENTITY著色器,這個著色器只是使用指定顏色以默認笛卡爾坐標在屏幕上渲染幾何圖形 */
shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed);
/** 提交著色器 */
triangleBatch.Draw();
/** 將在后臺離屏緩沖區(qū)進行渲染,然后在結束時交換到前臺 */
glutSwapBuffers();
}
int main(int argc, char* argv[]) {
/** 設置當前工作目錄,針對MAC OS X */
gltSetWorkingDirectory(argv[0]);
/** 初始化glut庫 */
glutInit(&argc, argv);
/** 初始化窗口 */
glutInitWindowSize(800,600);
/** 創(chuàng)建name為Ttriangle的窗口 */
glutCreateWindow("Triangle");
/** 注冊為重塑函數(shù),當窗口大小發(fā)生改變時/第一次創(chuàng)建窗口時,會調(diào)用此函數(shù)調(diào)整視口大小 */
glutReshapeFunc(ChangeSize);
/** 注冊為顯示渲染函數(shù) */
glutDisplayFunc(RenderScene);
/** 驅(qū)動程序的初始化中沒有出現(xiàn)任何問題 */
GLenum err = glewInit();
if (GLEW_OK != err) {
/** 打印驅(qū)動程序初始化錯誤信息 */
fprintf(stderr,"glew error:%s\n",glewGetErrorString(err));
/** 錯誤退出 */
return 1;
}
/** 調(diào)用SetupRC 設置你需要渲染的圖形的相關的頂點數(shù)據(jù)/顏色數(shù)據(jù)等準備工作 */
SetupRC();
/** 開啟OpenGL 的運行循環(huán)來監(jiān)聽事件 */
glutMainLoop();
/** 正常退出 */
return 0;
}
-
編譯運行
openGL10.jpg
轉(zhuǎn)載請備注原文出處,不可用于商業(yè)傳播———Isaiah_yu









