日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

OpenGL 关于旧版glut和新版本glfw和glad的环境配置

發(fā)布時(shí)間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenGL 关于旧版glut和新版本glfw和glad的环境配置 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

一.OpenGL的環(huán)境:

1.OpenGL

2.gult:OpenGL工具庫(kù) OpenGL Utility Toolkit

3.glew

4.glfw

5.glad(2018.9)

二.舊版本 glut的安裝方法 (資料最多的OpenGL,跳過(guò)此步驟即可,這里只是為了記錄)

1.方法

2.使用VS的插件

三.新版本 glfw和glad的安裝

1.下載glfw(管理窗口)和glad

2.打開(kāi)vs,創(chuàng)建新的空白工程

3.添加cpp

4.OpenGL屬性

5.glad文件

6.運(yùn)行測(cè)試代碼

7.警告解決辦法


?

在初學(xué)一講了寫(xiě)基本概念,之后紅寶書(shū)直接放上了代碼,所以我這里先配置一下OpenGL的環(huán)境。

首先介紹下OpenGL環(huán)境的演變:

一.OpenGL的環(huán)境:

1.OpenGL

OpenGL函數(shù)庫(kù)相關(guān)的API有核心庫(kù)(gl),實(shí)用庫(kù)(glu),輔助庫(kù)(aux)、實(shí)用工具庫(kù)(glut),窗口庫(kù)(glx、agl、wgl)和擴(kuò)展函數(shù)庫(kù)等。gl是核心,glu是對(duì)gl的部分封裝。glx、agl、wgl 是針對(duì)不同窗口系統(tǒng)的函數(shù)。glut是為跨平臺(tái)的OpenGL程序的工具包,比aux功能強(qiáng)大(aux很大程度上已經(jīng)被glut庫(kù)取代。)。擴(kuò)展函數(shù)庫(kù)是硬件廠商為實(shí)現(xiàn)硬件更新利用OpenGL的擴(kuò)展機(jī)制開(kāi)發(fā)的函數(shù)。

?

2.gult:OpenGL工具庫(kù) OpenGL Utility Toolkit

glut是實(shí)用工具庫(kù),基本上是用于做窗口界面的,并且是跨平臺(tái)。這部分函數(shù)以glut開(kāi)頭,主要包括窗口操作函數(shù),窗口初始化、窗口大小、窗口位置等函數(shù);回調(diào)函數(shù):響應(yīng)刷新消息、鍵盤(pán)消息、鼠標(biāo)消息、定時(shí)器函數(shù)等;創(chuàng)建復(fù)雜的三維物體;菜單函數(shù);程序運(yùn)行函數(shù)。gult對(duì)應(yīng)的開(kāi)源實(shí)現(xiàn)是freegult。

GLUT庫(kù)下載地址:http://www.transmissionzero.co.uk/software/freeglut-devel/

?

3.glew

glut 或者 freegult 主要是1.0的基本函數(shù)功能;glew是使用OpenGL2.0之后的一個(gè)工具函數(shù)。

不同的顯卡公司,也會(huì)發(fā)布一些只有自家顯卡才支 持的擴(kuò)展函數(shù),你要想用這函數(shù),不得不去尋找最新的glew.h,有了glew擴(kuò)展庫(kù),你就再也不用為找不到函數(shù)的接口而煩惱,因?yàn)間lew能自動(dòng)識(shí)別你的平臺(tái)所支持的全部OpenGL高級(jí)擴(kuò)展函數(shù)。也就是說(shuō),只要包含一個(gè)glew.h頭文件,你就能使用gl,glu,glext,wgl,glx的全部函數(shù)。(這里需要注意,glew并不包括glut)

GLEW庫(kù)下載地址:http://glew.sourceforge.net/

?

4.glfw

glfw 無(wú)愧于其號(hào)稱的 lightweight 的OpenGL框架,的確是除了跨平臺(tái)必要做的事情都沒(méi)有做,所以一個(gè)頭文件,很少量的API,就完成了任務(wù)。glfw 的開(kāi)發(fā)目的是用于替代 glut 的,從代碼和功能上來(lái)看,我想它已經(jīng)完全的完成了任務(wù)。

一個(gè)輕量級(jí)的,開(kāi)源的,跨平臺(tái)的library。支持OpenGL及OpenGL ES,用來(lái)管理窗口,讀取輸入,處理事件等。因?yàn)镺penGL沒(méi)有窗口管理的功能,所以很多熱心的人寫(xiě)了工具來(lái)支持這些功能,比如早期的glut,現(xiàn)在的freeglut等。

那么 glfw 有何優(yōu)勢(shì)呢?glut太老了,最后一個(gè)版本還是90年代的。freeglut完全兼容glut,算是glut的代替品,功能齊全,但是bug太多。穩(wěn)定性也不好(不是我說(shuō)的啊),glfw應(yīng)運(yùn)而生。

?

5.glad(2018.9)

glad與glew相比,簡(jiǎn)單說(shuō)glad是glew的升級(jí)版。用哪個(gè)都行。就是glew比較老,glad比較新。

?

所以綜上所述,我們需要安裝的就是?glad+glfw

?

我使用的是VS2017,以下主要講解組裝的辦法。

?

首先:

二.舊版本 glut的安裝方法 (資料最多的OpenGL,跳過(guò)此步驟即可,這里只是為了記錄)

1.方法

下載OpenGL的所需要的文件

http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip

然后得到5個(gè)文件:

glut.dll glut32.dll glut.lib glut32.lib?glut.h

然后:

1.找到目錄..\VC\Tools\MSVC\14.10.25017\include\gl(沒(méi)有的話就建立一個(gè))。?將glut.h放到里面。

2.找到目錄..\VC\Tools\MSVC\14.10.25017\lib\x86? 將glut.lib,glut32.lib放到里面。

3.最后把glut.dll和glut32.dll放到C:\Windows\system32文件夾內(nèi)(電腦32位系統(tǒng))或?C:\Windows\SysWOW64(電腦64位系統(tǒng))。

?

2.使用VS的插件

打開(kāi)vs創(chuàng)建一個(gè)C++項(xiàng)目(Win32控制臺(tái)-空白項(xiàng)目

然后點(diǎn)擊?項(xiàng)目—管理Nuget程序包(若沒(méi)有找到項(xiàng)目底下的這個(gè)選項(xiàng),請(qǐng)點(diǎn)擊這里)

然后點(diǎn)擊瀏覽—在搜索欄輸入 NupenGL

然后安裝(如果有兩個(gè)就安裝兩個(gè))。

裝完后測(cè)試一下,輸入以下代碼

  • #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;

  • }

  • 運(yùn)行后就會(huì)看到一個(gè)白色的正方形

    ?

    三.新版本 glfw和glad的安裝

    1.下載glfw(管理窗口)和glad

    首先是glfw

    http://www.glfw.org/download.html

    在這里我們選擇編譯好的版本 想自己編譯的朋友可以下載?Source package(用CMake)

    我們選擇32-bit,這里不是按照電腦來(lái)選的,是按照vs里面的

    x86就是32位的

    ?

    其次是glad

    glad有一個(gè)在線服務(wù),直接下下來(lái)就可以用了(編譯好的),將語(yǔ)言(Language)設(shè)置為C/C++,在API選項(xiàng)中,選擇3.3以上的OpenGL版本(3.3是可編程管線版本,但更新的版本也能正常工作)。之后將模式(Profile)設(shè)置為Core,并且保證生成加載器(Generate a loader)的選項(xiàng)是選中的?,F(xiàn)在可以先(暫時(shí))忽略拓展(Extensions)中的內(nèi)容。都選擇完之后,點(diǎn)擊生成(Generate)按鈕來(lái)生成庫(kù)文件。

    下載是個(gè)壓縮文件。

    壓縮文件里包含兩個(gè)頭文件目錄(內(nèi)有頭文件glad.h和khrplatform.h),和一個(gè)src文件夾下的glad.c文件。

    然后我們把這下載好的兩個(gè)文件夾移到某個(gè)文件下。

    ?

    2.打開(kāi)vs,創(chuàng)建新的空白工程

    注:如果新建Windows控制臺(tái)應(yīng)用程序,程序內(nèi)部會(huì)自動(dòng)包含stdafx.h的頭文件,你必須在源文件的開(kāi)頭寫(xiě)上“#include“stdafx.h”相關(guān)語(yǔ)句,而且之后引入glew,glfw包會(huì)有莫名其妙的錯(cuò)誤。所以創(chuàng)建一個(gè)空項(xiàng)目。

    ?

    3.添加cpp

    點(diǎn)擊“解決方案資源管理器”,右鍵點(diǎn)擊源文件,添加新項(xiàng),創(chuàng)建.cpp源文件,輸入代碼,正常的代碼即可。(我這里加了一個(gè)graphics.cpp)

    ?

    4.OpenGL屬性

    右鍵點(diǎn)擊項(xiàng)目,在彈出的選項(xiàng)中,單擊 “屬性”。

    點(diǎn)擊“VC++目錄”,第二步會(huì)有下拉列表,單擊“編輯”

    點(diǎn)擊添加頭文件。分別添加下載的glad和glfw文件夾下的include文件夾(include文件夾下是我們需要的頭文件),點(diǎn)擊“確定”

    同樣的道理,加入庫(kù)文件。(庫(kù)文件和頭文件是相輔相成的),對(duì)應(yīng)的路徑就是glfw文件夾下的lib文件夾(glad不需要

    注:當(dāng)添加glfw時(shí),低版本請(qǐng)選擇對(duì)應(yīng)版本,2015以上版本請(qǐng)選擇“l(fā)ib-vc2015”

    ?

    之后包含的庫(kù)文件VS還認(rèn)不出來(lái),我們需要指定一下。配置鏈接器。

    點(diǎn)擊“編輯”后輸入如下:

  • opengl32.lib

  • glfw3.lib

  • 注:行與行之間請(qǐng)按回車,opengl32.lib是系統(tǒng)自帶的。

    點(diǎn)擊確定

    ?

    5.glad文件

    將glad.c文件復(fù)制到源文件夾下,直接復(fù)制,然后右擊源文件夾粘貼即可。

    至此OpenGL的環(huán)境就初步配好了

    ?

    6.運(yùn)行測(cè)試代碼

    在之前的cpp中添加如下代碼:(初始化一個(gè)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;

  • }

  • 點(diǎn)擊“運(yùn)行”,成功初始化了一個(gè)OpenGL的窗口

    但是,當(dāng)我們關(guān)掉程序回到“錯(cuò)誤列表”中會(huì)發(fā)現(xiàn)警告LNK4098默認(rèn)庫(kù)“MSVCRT”與其他庫(kù)的使用沖突;

    請(qǐng)使用 /NODEFAULTLIB:libraryOpenC:\Users\g1018\source\repos\Open\Open\LINK1

    解決方法如下。

    ?

    7.警告解決辦法

    把之前的鏈接器的那個(gè)頁(yè)面調(diào)出來(lái)。

    點(diǎn)擊“編輯”,輸入如下:

    MSVCRT.lib

    點(diǎn)擊“確定”。注:如果往后還有庫(kù)沖突,解決方法同理。

    ?

    至此,環(huán)境已經(jīng)搭建完成。

    ?

    參考網(wǎng)址:

    https://blog.csdn.net/AvatarForTest/article/details/79199807

    https://blog.csdn.net/qq_19003345/article/details/76098781

    總結(jié)

    以上是生活随笔為你收集整理的OpenGL 关于旧版glut和新版本glfw和glad的环境配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。