OpenGL入門 -- 環境搭建
上一篇介紹一下
OpenGL
的專業名詞的相關知識,本篇來詳細的記錄一下OpenGL
的環境搭建,以及OpenGL
中的“Hello Word”
。
準備資源
搭建環境,需要以下準備資源,也可以通過鏈接下載。
- CLTools
- glew
- libGLTools.a
OpenGL
環境搭建資源:百度網盤鏈接 ,密碼:at14
。
搭建OpenGL環境
-
打開
Xcode
新建項目,選擇macOS
,選擇APP
-
添加
OpenGL.framework
和GLUT.framework
兩個系統庫。 -
添加
CLTools.h
和glew.h
,在build settings
中輸入Header search path
,設置路徑。- 拖入下載好的資源包
include
到項目中 - 拖入下載好的資源包
libGLTools.a
文件到Framework
文件夾中 - 在
build settings
中輸入Header search path
,直接將include
文件拖入,設置路徑。
- 拖入下載好的資源包
-
刪除原有項目的
AppDelegate.h
、AppDelegate.m
、ViewController.h
、ViewController.m
和main.m
文件,並創建main.cpp
文件。 -
在
main.cpp
文件中,添加下面代碼#include <stdio.h> #include "GLShaderManager.h" #include "GLTools.h" #include <glut/glut.h> GLBatch triangleBatch; GLShaderManager shaderManager; //窗口大小改變時接受新的寬度和高度,其中0,0代表窗口中視口的左下角座標,w,h代表像素 void ChangeSize(int w,int h) { glViewport(0,0, w, h); } //爲程序作一次性的設置 void SetupRC() { //設置背影顏色 glClearColor(0.0f,1.0f,1.0f,0.0f); //初始化着色管理器 shaderManager.InitializeStockShaders(); //設置三角形,其中數組vVert包含所有3個頂點的x,y,笛卡爾座標對。 GLfloat vVerts[] = { -0.8f,0.0f,0.0f, 0.6f,0.0f,0.0f, 0.1f,0.2f,0.0f, }; //批次處理 triangleBatch.Begin(GL_TRIANGLES,3); triangleBatch.CopyVertexData3f(vVerts); triangleBatch.End(); } //開始渲染 void RenderScene(void) { //清除一個或一組特定的緩衝區 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT); //設置一組浮點數來表示紫色 GLfloat vRed[] = {1.0f,0.0f,1.0f,1.0f}; //傳遞到存儲着色器,即GLT_SHADER_IDENTITY着色器,這個着色器只是使用指定顏色以默認笛卡爾座標第在屏幕上渲染幾何圖形 shaderManager.UseStockShader(GLT_SHADER_IDENTITY,vRed); //提交着色器 triangleBatch.Draw(); //將在後臺緩衝區進行渲染,然後在結束時交換到前臺 glutSwapBuffers(); } int main(int argc,char* argv[]) { //設置當前工作目錄,針對MAC OS X gltSetWorkingDirectory(argv[0]); //初始化GLUT庫 glutInit(&argc, argv); /*初始化雙緩衝窗口,其中標誌GLUT_DOUBLE、GLUT_RGBA、GLUT_DEPTH、GLUT_STENCIL分別指 雙緩衝窗口、RGBA顏色模式、深度測試、模板緩衝區*/ glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH|GLUT_STENCIL); //GLUT窗口大小,標題窗口 glutInitWindowSize(800,600); glutCreateWindow("Triangle"); //註冊回調函數 glutReshapeFunc(ChangeSize); glutDisplayFunc(RenderScene); //驅動程序的初始化中沒有出現任何問題。 GLenum err = glewInit(); if(GLEW_OK != err) { fprintf(stderr,"glew error:%s\n",glewGetErrorString(err)); return 1; } //調用SetupRC SetupRC(); glutMainLoop(); return 0; }
上面的代碼會有一些警告 ⚠️,可用下面方法關閉
最終展示效果如下,OpenGL
的Hello Word
搞定。