OpenGL環(huán)境搭建 耗時2天心碎

OpenGL配置
  • 開發(fā)環(huán)境 : VS2022
  • OpenGL庫 : glew freeglut gltools
  • 配置項目的工具 : cmake
    *動態(tài)庫庫的版本 :win32用32位的 win64的用64位的 對應(yīng)不是各種報錯等著你赌躺!
  • 我只配置64位環(huán)境
我的項目基礎(chǔ)配置 bin include lib
image.png
  • lib文件夾 放 .lib文件


    image.png
  • bin文件夾 放.dll動態(tài)庫文件


    image.png
  • include文件夾 放頭文件


    image.png
image.png
配置freeglut

https://sourceforge.net/projects/freeglut/files/

image.png
image.png
  • cMake 配置 freeglut項目 生成動態(tài)庫

D:/OpenGl/freeglut-3.4.0/freeglut-3.4.0 (cMakeLists路徑)
D:/OpenGl/freeglut-3.4.0/freeglut-3.4.0/build (生成項目路徑 手動創(chuàng)建build文件夾)

1.點擊Configure 2.成功點擊Generate


image.png
image.png
image.png
  • freeglut 設(shè)置為啟動項目
image.png
  • 成功


    image.png
  • 拿到freeglut.lib庫


    image.png
image.png
  • bin 文件夾 拿動態(tài)庫 freeglut.dll文件


    image.png

freeglut.lib freeglut.dll
放入項目的lib文件 和 bin文件夾

下面的頭文件放入到include/GL 文件夾下面


image.png

.dll可以放入系統(tǒng)路徑下面
32位的.dll 放入系統(tǒng)64位文件夾下面 (win32-64版本遷移為了兼容這樣做的)
C:\Windows\SysWOW64
64位的.dll放入32位的文件夾下面
C:\Windows\System32

配置glew

https://glew.sourceforge.net/

image.png
image.png
image.png
image.png

glew32s.lib glew32.dll
放入項目lib 和 bin文件夾
項目只用 glew32s.lib

最后配置gltools (依賴glew)

只有g(shù)ltools生成靜態(tài)庫文件
利用源碼 通過vs2022 生成靜態(tài)庫(可以用cMake配置項目)
gltools.lib為靜態(tài)庫 需要添加 #pragma comment(lib,"Gltools.lib")

網(wǎng)上下載 gltools包 有源碼 和 頭文件 (后續(xù)會放到云盤)

image.png

創(chuàng)建gltools空項目 include 文件夾

image.png
image.png
image.png

glew.h 和 wglew.h 通過之前配置glew文件夾拷貝過來

  • 配置項目路徑


    image.png
  • 調(diào)整編譯靜態(tài)庫


    image.png
  • 運行錯誤1

gltools1.png
  • 預(yù)處理器添加 WIN32


    gltools2.png
  • 錯誤2 (可能出現(xiàn))

1>ConsoleApplication8.obj : error LNK2019: 無法解析的外部符號 __imp__glClear@4,該符號在函數(shù) “void __cdecl display(void)” (?display@@YAXXZ) 中被引用

glew.c 添加 #pragma comment(lib,"OpenGL32.lib")


3.png
  • 成功生成靜態(tài)庫


    image.png
image.png

Gltools.lib
放入項目 lib文件夾

配置項目
  • 配置include文件路徑


    image.png
  • 配置環(huán)境bin文件夾路徑


    image.png
  • 配置lib文件夾路徑

image.png
  • 配置項目需要的lib庫
image.png

freeglutd.lib glew32s.lib Gltools.lib

image.png

直接配置 freeglutd.dll到 C:\Windows\System32 或者項目 debug目錄下

#include <iostream>
#include <stdlib.h>
#include <string.h>
#if defined(_WIN32) || defined(WIN32)
#include <windows.h> 
#endif

#include <GLTools.h>    // OpenGL toolkit
#include <GLMatrixStack.h>
#include <GLFrame.h>
#include <GLFrustum.h>
#include <GLBatch.h>
#include <GLGeometryTransform.h>


#include <GL\freeglut.h>

//gltools為靜態(tài)庫需要添加
#pragma comment(lib,"Gltools.lib")

//自定義著色管理器
GLShaderManager shaderManager;
//簡單的批次容器 是GLTools的一個簡單容器
GLBatch triangleBatch;



//改變窗口大小
void ChangeSize(int w, int h) {
    glViewport(0, 0, w, h);
}

void SpeacialKeys(int key, int x, int y) {


}

//This function does any needed initialization on the rendering context.
//This is the first opportunity to do any OpenGL related tasks.
void SetupRC() {
    //背景顏色
    glClearColor(0.0f, 0.0f, 1.0f, 1.0f);

    //初始化著色器管理
    shaderManager.InitializeStockShaders();
    //Load up a triangle

    //x y z   -1  -> 1

    //3個點 A x = -0.5  y = 0 z = 0
          //  B x = 0.5 y = 0 z = 0
          //  C  x = 0 y=0.5 z = 0

    GLfloat vVerts[] = {
      -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(vVerts);
    triangleBatch.End();
}
//Called to draw scene
void RenderScene(void) {
    //Clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
    GLfloat vRed[] = { 1.0f,0.0f,0.0f,1.0f };
    //著色器名字 單元著色器
    shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
    //容器進(jìn)行繪畫
    triangleBatch.Draw();

    //Perform the buffer swap to display the back buffer
    glutSwapBuffers();
}

int main(int argc, char* argv[]) {

    //設(shè)置當(dāng)前工作目錄
    gltSetWorkingDirectory(argv[0]);

    //傳輸命令行參數(shù)并初始化GLUT庫
    glutInit(&argc, argv);

    //創(chuàng)建窗口使用哪種類型顯示模式殷勘,雙緩沖串口和RGBA顏色模式
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);

    //窗口大小
    glutInitWindowSize(800, 600);

    //窗口標(biāo)題
    glutCreateWindow("Triangle");

    //窗口改變大小回調(diào)函數(shù)婉陷,以便能夠設(shè)置視點
    glutReshapeFunc(ChangeSize);

    //注冊函數(shù)包含OpenGL渲染代碼
    glutDisplayFunc(RenderScene);

    //特殊鍵位
    glutSpecialFunc(SpeacialKeys);

    //初始化GLEW庫碑隆,初始化驅(qū)動程序中所有丟失的入口點拇惋,確保OpenGL API可用
    GLenum err = glewInit();
    if (GLEW_OK != err) {
        fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
        return 1;
    }
    //渲染環(huán)境炼七,運行中的OpenGL狀態(tài)機(jī)的句柄
    SetupRC();
    //開啟主消息循環(huán)并結(jié)束main函數(shù)
    glutMainLoop();
}
image.png
總結(jié)耗時久的原因

1.網(wǎng)上下載別人的配置包 然后各種報錯 開始懷疑是win32的.lib導(dǎo)致的 然后開始一步步的從官網(wǎng)下載庫 vs編譯源碼生成對應(yīng)平臺的庫

  1. 開始的時候 我把glut的庫也配置進(jìn)項目 也可能會導(dǎo)致各種問題 現(xiàn)在直接用freeglut glut有兩個 glut.lib glut32.lib 不懂直接copy進(jìn)了項目 各種問題隨之而來

“glut32.dll” "glut32.lib"用于微軟的win32平臺熬粗,“glut.dll” “glut.lib"用于SGI平臺
此處我們的編譯環(huán)境是x64 和x86環(huán)境鸥鹉,所以只需要"glut32.dll” "glut32.lib"這兩個文件

  1. glew32.lib glew32s.lib
lib庫要使用glew32s.lib蛮穿,(不要用glew32.lib)(其中s 是static的意思,glew32.lib需要glew32.dll毁渗,glew32s.lib就不需要了)

#define GLEW_STATIC

#include "glew.h"

#pragma comment(lib, "glew32s.lib")

就不用再改project options了践磅。

如果用GLEW就要在屬性設(shè)置里添加一個庫openGL32.lib,否則有很多專有類型識別不出來

  1. 各種異常百分之99的問題都是庫的問題>囊臁8省8岱伞!i艽骸B咛省!E迸?ㄈ濉!@汀骨望!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市窜骄,隨后出現(xiàn)的幾起案子锦募,更是在濱河造成了極大的恐慌摆屯,老刑警劉巖邻遏,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異虐骑,居然都是意外死亡准验,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門廷没,熙熙樓的掌柜王于貴愁眉苦臉地迎上來糊饱,“玉大人,你說我怎么就攤上這事颠黎×矸妫” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵狭归,是天一觀的道長夭坪。 經(jīng)常有香客問我,道長过椎,這世上最難降的妖魔是什么室梅? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮疚宇,結(jié)果婚禮上亡鼠,老公的妹妹穿的比我還像新娘。我一直安慰自己敷待,他們只是感情好间涵,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著榜揖,像睡著了一般勾哩。 火紅的嫁衣襯著肌膚如雪股耽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天钳幅,我揣著相機(jī)與錄音物蝙,去河邊找鬼。 笑死敢艰,一個胖子當(dāng)著我的面吹牛诬乞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钠导,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼震嫉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了牡属?” 一聲冷哼從身側(cè)響起票堵,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逮栅,沒想到半個月后悴势,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡措伐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年特纤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侥加。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡捧存,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出担败,到底是詐尸還是另有隱情昔穴,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布提前,位于F島的核電站吗货,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏岖研。R本人自食惡果不足惜卿操,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望孙援。 院中可真熱鬧害淤,春花似錦、人聲如沸拓售。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽础淤。三九已至崭放,卻和暖如春哨苛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背币砂。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工建峭, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人决摧。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓亿蒸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掌桩。 傳聞我的和親對象是個殘疾皇子边锁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容