OpenGL 关于旧版glut和新版本glfw和glad的环境配置
目錄
一.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;
}
運行后就會看到一個白色的正方形
?
三.新版本 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點擊“確定”。注:如果往后還有庫沖突,解決方法同理。
?
至此,環境已經搭建完成。
?
參考網址:
https://blog.csdn.net/AvatarForTest/article/details/79199807
https://blog.csdn.net/qq_19003345/article/details/76098781
總結
以上是生活随笔為你收集整理的OpenGL 关于旧版glut和新版本glfw和glad的环境配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL:ImGUI在GLFW库和G
- 下一篇: OpenGL 开发环境配置(Window