目錄
一.OpenGL的環境:
1.OpenGL
2.gult:OpenGL工具庫 OpenGL Utility Toolkit
3.glew
4.glfw
5.glad(2018.9)
二.舊版本 glut的安裝方法 (資料最多的OpenGL,跳過此步驟即可,這裡隻是為了記錄)
1.方法
2.使用VS的插件
三.新版本 glfw和glad的安裝
1.下載下傳glfw(管理視窗)和glad
2.打開vs,建立新的空白工程
3.添加cpp
4.OpenGL屬性
5.glad檔案
6.運作測試代碼
7.警告解決辦法
在初學一講了寫基本概念,之後紅寶書直接放上了代碼,是以我這裡先配置一下OpenGL的環境。
首先介紹下OpenGL環境的演變:
一.OpenGL的環境:
1.OpenGL
OpenGL函數庫相關的API有核心庫(gl),實用庫(glu),輔助庫(aux)、實用工具庫(glut),視窗庫(glx、agl、wgl)和擴充函數庫等。gl是核心,glu是對gl的部分封裝。glx、agl、wgl 是針對不同視窗系統的函數。glut是為跨平台的OpenGL程式的工具包,比aux功能強大(aux很大程度上已經被glut庫取代。)。擴充函數庫是硬體廠商為實作硬體更新利用OpenGL的擴充機制開發的函數。
2.gult:OpenGL工具庫 OpenGL Utility Toolkit
glut是實用工具庫,基本上是用于做視窗界面的,并且是跨平台。這部分函數以glut開頭,主要包括視窗操作函數,視窗初始化、視窗大小、視窗位置等函數;回調函數:響應重新整理消息、鍵盤消息、滑鼠消息、定時器函數等;建立複雜的三維物體;菜單函數;程式運作函數。gult對應的開源實作是freegult。
GLUT庫下載下傳位址:http://www.transmissionzero.co.uk/software/freeglut-devel/
3.glew
glut 或者 freegult 主要是1.0的基本函數功能;glew是使用OpenGL2.0之後的一個工具函數。
不同的顯示卡公司,也會釋出一些隻有自家顯示卡才支 持的擴充函數,你要想用這函數,不得不去尋找最新的glew.h,有了glew擴充庫,你就再也不用為找不到函數的接口而煩惱,因為glew能自動識别你的平台所支援的全部OpenGL進階擴充函數。也就是說,隻要包含一個glew.h頭檔案,你就能使用gl,glu,glext,wgl,glx的全部函數。(這裡需要注意,glew并不包括glut)
GLEW庫下載下傳位址:http://glew.sourceforge.net/
4.glfw
glfw 無愧于其号稱的 lightweight 的OpenGL架構,的确是除了跨平台必要做的事情都沒有做,是以一個頭檔案,很少量的API,就完成了任務。glfw 的開發目的是用于替代 glut 的,從代碼和功能上來看,我想它已經完全的完成了任務。
一個輕量級的,開源的,跨平台的library。支援OpenGL及OpenGL ES,用來管理視窗,讀取輸入,處理事件等。因為OpenGL沒有視窗管理的功能,是以很多熱心的人寫了工具來支援這些功能,比如早期的glut,現在的freeglut等。
那麼 glfw 有何優勢呢?glut太老了,最後一個版本還是90年代的。freeglut完全相容glut,算是glut的代替品,功能齊全,但是bug太多。穩定性也不好(不是我說的啊),glfw應運而生。
5.glad(2018.9)
glad與glew相比,簡單說glad是glew的更新版。用哪個都行。就是glew比較老,glad比較新。
是以綜上所述,我們需要安裝的就是 glad+glfw
我使用的是VS2017,以下主要講解組裝的辦法。
首先:
二.舊版本 glut的安裝方法 (資料最多的OpenGL,跳過此步驟即可,這裡隻是為了記錄)
1.方法
下載下傳OpenGL的所需要的檔案
http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip
然後得到5個檔案:
glut.dll glut32.dll glut.lib glut32.lib glut.h
然後:
1.找到目錄..\VC\Tools\MSVC\14.10.25017\include\gl(沒有的話就建立一個)。 将glut.h放到裡面。
2.找到目錄..\VC\Tools\MSVC\14.10.25017\lib\x86 将glut.lib,glut32.lib放到裡面。
3.最後把glut.dll和glut32.dll放到C:\Windows\system32檔案夾内(電腦32位系統)或C:\Windows\SysWOW64(電腦64位系統)。
2.使用VS的插件
打開vs建立一個C++項目(Win32控制台-空白項目)
然後點選 項目—管理Nuget程式包(若沒有找到項目底下的這個選項,請點選這裡)
然後點選浏覽—在搜尋欄輸入 NupenGL
然後安裝(如果有兩個就安裝兩個)。
裝完後測試一下,輸入以下代碼
-
#include <GL/glut.h>
-
void Show()
-
{
-
glClear(GL_COLOR_BUFFER_BIT);
-
glRectf(-0.1f, -0.1f, 0.5f, 0.5f);
-
glFlush();
-
}
-
int main(int argc, char *argv[])
-
{
-
glutInit(&argc, argv);
-
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
-
glutInitWindowPosition(100, 100);
-
glutInitWindowSize(400, 400);
-
glutCreateWindow("OpenGL");
-
glutDisplayFunc(Show);
-
glutMainLoop();
-
return 0;
-
}
運作後就會看到一個白色的正方形
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yN3UjM4U2N2ITZ0IGOwETYyYzXyEDOzQDM5AzLcZDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
三.新版本 glfw和glad的安裝
1.下載下傳glfw(管理視窗)和glad
首先是glfw
http://www.glfw.org/download.html
在這裡我們選擇編譯好的版本 想自己編譯的朋友可以下載下傳 Source package(用CMake)
我們選擇32-bit,這裡不是按照電腦來選的,是按照vs裡面的
x86就是32位的
其次是glad
glad有一個線上服務,直接下下來就可以用了(編譯好的),将語言(Language)設定為C/C++,在API選項中,選擇3.3以上的OpenGL版本(3.3是可程式設計管線版本,但更新的版本也能正常工作)。之後将模式(Profile)設定為Core,并且保證生成加載器(Generate a loader)的選項是選中的。現在可以先(暫時)忽略拓展(Extensions)中的内容。都選擇完之後,點選生成(Generate)按鈕來生成庫檔案。
下載下傳是個壓縮檔案。
壓縮檔案裡包含兩個頭檔案目錄(内有頭檔案glad.h和khrplatform.h),和一個src檔案夾下的glad.c檔案。
然後我們把這下載下傳好的兩個檔案夾移到某個檔案下。
2.打開vs,建立新的空白工程
注:如果建立Windows控制台應用程式,程式内部會自動包含stdafx.h的頭檔案,你必須在源檔案的開頭寫上“#include“stdafx.h”相關語句,而且之後引入glew,glfw包會有莫名其妙的錯誤。是以建立一個空項目。
3.添加cpp
點選“解決方案資料總管”,右鍵點選源檔案,添加新項,建立.cpp源檔案,輸入代碼,正常的代碼即可。(我這裡加了一個graphics.cpp)
4.OpenGL屬性
右鍵點選項目,在彈出的選項中,單擊 “屬性”。
點選“VC++目錄”,第二步會有下拉清單,單擊“編輯”
點選添加頭檔案。分别添加下載下傳的glad和glfw檔案夾下的include檔案夾(include檔案夾下是我們需要的頭檔案),點選“确定”
同樣的道理,加入庫檔案。(庫檔案和頭檔案是相輔相成的),對應的路徑就是glfw檔案夾下的lib檔案夾(glad不需要)
注:當添加glfw時,低版本請選擇對應版本,2015以上版本請選擇“lib-vc2015”
之後包含的庫檔案VS還認不出來,我們需要指定一下。配置連結器。
點選“編輯”後輸入如下:
-
opengl32.lib
-
glfw3.lib
注:行與行之間請按回車,opengl32.lib是系統自帶的。
點選确定
5.glad檔案
将glad.c檔案複制到源檔案夾下,直接複制,然後右擊源檔案夾粘貼即可。
至此OpenGL的環境就初步配好了
6.運作測試代碼
在之前的cpp中添加如下代碼:(初始化一個Opengl視窗)
-
#include <glad/glad.h>
-
#include <GLFW/glfw3.h>
-
#include <iostream>
-
const unsigned int SCR_WIDTH = 800;
-
const unsigned int SCR_HEIGHT = 600;
-
int main()
-
{
-
glfwInit();
-
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
-
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
-
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
-
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
-
if (window == NULL)
-
{
-
std::cout << "Failed to create GLFW window" << std::endl;
-
glfwTerminate();
-
return -1;
-
}
-
glfwMakeContextCurrent(window);
-
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
-
{
-
std::cout << "Failed to initialize GLAD" << std::endl;
-
return -1;
-
}
-
while (!glfwWindowShouldClose(window))
-
{
-
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
-
glClear(GL_COLOR_BUFFER_BIT);
-
glfwSwapBuffers(window);
-
glfwPollEvents();
-
}
-
glfwTerminate();
-
return 0;
-
}
點選“運作”,成功初始化了一個OpenGL的視窗
但是,當我們關掉程式回到“錯誤清單”中會發現警告LNK4098預設庫“MSVCRT”與其他庫的使用沖突;
請使用 /NODEFAULTLIB:libraryOpenC:\Users\g1018\source\repos\Open\Open\LINK1
解決方法如下。
7.警告解決辦法
把之前的連結器的那個頁面調出來。
點選“編輯”,輸入如下:
MSVCRT.lib
點選“确定”。注:如果往後還有庫沖突,解決方法同理。