OpenGL學習筆記 1.前期準備工作 (freegult+GLTools配置及匯入)
行百里者半九十。為了激勵自己能夠不斷的學習圖形學,在此部落格中記錄自己學習OpenGL的過程與感悟。接下來的筆記全部基於OpenGL SuperBible5(藍寶書),這篇文章將會從最基礎的繪製Triangle開始。
一.需要的標頭檔案以及靜態庫
1.GLUT
GLUT庫相當於是OpenGL的實用工具箱,包括建立視窗,彈出式選單,視窗管理...我的理解是GLUT庫方便了我們進行視窗的建立...在VS中並不需要MFC的知識就可以利用GLUT庫建立屬於你自己的視窗。在Windows中,GLUT的開發已經中斷,現有的一個叫做freeglut的函式庫已經取代了它的位置,我們的藍寶書教程用的也都是freeglut函式庫。
2.GLEW與GLTools
在C/C++程式中使用OpenGL時,需要使用GLEW這樣的第三方庫來載入OpenGL函式。windows目前只支援OpenGL1.1的涵數,但 OpenGL現在都發展到2.0以上了,要使用這些OpenGL的高階特性,就必須下載最新的擴充套件,另外,不同的顯示卡公司,也會發布一些只有自家顯示卡才支 持的擴充套件函式,你要想用這數涵數,不得不去尋找最新的glext.h,有了GLEW擴充套件庫,你就再也不用為找不到函式的介面而煩惱,因為GLEW能自動識 別你的平臺所支援的全部OpenGL高階擴充套件涵數。也就是說,只要包含一個glew.h標頭檔案,你就能使用gl,glu,glext,wgl,glx的全部函式。
GLTools是藍寶書編寫人員開發的庫(因該是吧?不對請指正)。GLTools是基於GLEW庫的,也就是說GLTools裡面是封裝了GLEW庫的,這樣我們就不用include<glew.h>而是include<GLTools.h>就可以了。GLTools裡封裝了用於操作矩陣和向量的3D數學庫,並且有預設的shader可以渲染簡單的3D物件。
上面提到的freeglut以及GLTools我已經上傳到CSDN,並且有藍寶書第五版中文版與英文原版(彩印的哦),有需要的同志們可以下載,下載連結:https://download.csdn.net/download/yuquan87/10429421
建立專案的時候需要將標頭檔案包含進入專案。
freeglut的標頭檔案目錄如下:...\SB5\freeglut-2.6.0\include
GLTools標頭檔案目錄如下:...\SB5\Src\GLTools\include
包含標頭檔案可不夠,還需要連結靜態庫,我們在專案名稱上點選右鍵,Add->Existing Item,新增:
..\SB5\freeglut-2.6.0\VisualStudio2008Static\Release下的freeglut_static.lib
新增...\SB5\VisualStudio2008\GLTools\Release下的gltools.lib
這樣我們可以愉快的繪製第一個三角形啦!
// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.
#include <GLTools.h> // OpenGL toolkit
#include <GLShaderManager.h> // Shader Manager Class
#ifdef __APPLE__
#include <glut/glut.h> // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h> // Windows FreeGlut equivalent
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;//
///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
///////////////////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering context.
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
// Blue background
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);//設定背景顏色
shaderManager.InitializeStockShaders();//初始化著色器,使其可以編譯連結自己的著色器
// Load up a triangle
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);
triangleBatch.Draw();//將幾何圖形 提交到著色器
// Perform the buffer swap to display back buffer
glutSwapBuffers();
}
///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
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();
glutMainLoop();
return 0;
}
複製上面的程式碼進入你的VS,看看是不是一樣的效果^_^
原始碼解讀(自我理解):
main函式中:
gltSetWorkingDirectory(argv[0]);
是為了用來設定當前工作目錄。在windows平臺下面是不需要這一句話的,去掉也可以正常執行。(因為工作目錄與程式的可執行目錄是一樣的);
1. 我們需要初始化GLUT庫,沒有這個怎麼建立視窗呢?
glutInit(&argc, argv);
2. 設定GLUT庫,選擇建立視窗時的顯示模式(單緩衝還是雙緩衝 顏色模式 是否深度測試 是否有模板快取等等)
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
3. 設定視窗大小,標題;
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
4. 執行系統本地訊息迴圈,捕捉系統訊息、按鍵動作等,設定視區函式(viewport)指定著色方式
glutReshapeFunc(ChangeSize);//viewpoert
glutDisplayFunc(RenderScene);
5. 初始化GLEW函式庫 GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}
6. 這時候可以把我們想繪製出的圖形展示出來,可以載入紋理,建立幾何圖形、渲染器等工作
SetupRC();
最後就是開始主訊息迴圈 並且結束main函數了
glutMainLoop();
return 0;
GlutMainLoop函式在呼叫之後,在主視窗被關閉之前都不會返回,一個應用程式只需要呼叫一次,這個函式負責處理我們所有的訊息,直到我們關閉程式為止。
相關推薦
OpenGL學習筆記 1.前期準備工作 (freegult+GLTools配置及匯入)
行百里者半九十。為了激勵自己能夠不斷的學習圖形學,在此部落格中記錄自己學習OpenGL的過程與感悟。接下來的筆記全部基於OpenGL SuperBible5(藍寶書),這篇文章將會從最基礎的繪製Triangle開始。一.需要的標頭檔案以及靜態庫1.GLUTGLUT庫相當於是O
開啟深度學習/TensorFlow的前期準備工作和數學知識
一、安裝環境 我使用macbook僅是用來測試一些流程性問題,實際操作的話不建議使用MAC OS系統,MAC OS系統使用GPU不太方便(雖然網上有許多macbook外接GPU的教程,但總歸是很心疼的)。實際跑深度學習工程時,我會放在ubuntu伺服器上。 二、安
opengl學習筆記1:vs2013 nehe教程第一課 建立視窗
近來需要想學習一下opengl,但是小白沒有任何基礎,也非計算機專業出身,只能一步一步學習nehe的程式來學習了。這裡實現了在WIN10 vs2013 opengl2.0 環境下跑通nehe教程第一課的程式。 1.系統配置 新建vs2013 “win
Opengl學習筆記1 -- 做一個透視立方體
截圖如下: 第一個難度較低,第二個任務則包含更多的程式碼學習,所以在這裡將hw2-2中的相關程式碼解釋一遍: glClearColor(1.0,1.0,1.0,0.0);這四個引數分
openGL學習筆記1(入門----如何繪製 直線、多邊形、圓、利用圖片繪製圖形等)
#include <GL/glut.h> void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT);//GL_COLOR_BUFFER_BIT表示清除顏色 glRectf(-0.5f, -0.5f, 0.5f,
QT5.11.1結合VS2017學習筆記:(一)環境的配置及HelloWorld的實現
前言: 最近開始學習QT,由於習慣了使用VS而網上的教程大多都是基於QTCreator的,很少有基於VS的。為此,本人決定將自己學習的過程記錄下來。水平有限,有不對的地方,歡迎大家批評指正! 工具及系統:VS2017,Qt5.11.1 一、環境配置 1、安
TensorFlow學習筆記1-Windows下通過Anaconda安裝TensorFlow及Spyder編譯器
此文是本人在windows安裝tensorflow看到最準確最全的資料,貼在這裡留存。同時,安裝過程中還參考了這個博文:http://blog.csdn.net/ztf312/article/details/56018891 另外,按照作者的方法安裝後,需要在tensor
lfs學習筆記(一)前期準備工作
一名linux愛好者,記錄構建Linux From Scratch的過程 經部落格園-駿馬金龍前輩介紹,開始接觸學習lfs,用部落格記錄學習筆記,如有寫的不恰當的地方,望多多指正。筆記中只是記錄一些問題和書中表述不清晰的內容的處理辦法以及我的解決思路,僅做參考。 要實際構建lfs請結合lfs官方的書籍操作
資料分析學習筆記(1):工作環境以及建模理論基礎
一、環境部署 1.python包管理: (1)安裝:pip install xxx,conda install xxx (2)解除安裝:pip uninstall xxx, conda uninstall xxx (3)升級:pip install -upgrade xx
opengl es3.0遊戲開發學習筆記1-繪製旋轉的三角形
前段時間一直在看opengl es2.0遊戲開發的知識 ,這幾天買了本opengl es3.0遊戲開發的書 打算一邊學習一邊整理學習筆記,我的開發環境是Android studio 2.1.3,不過有個問題是Android studio自帶的模擬器只能支援es2
OpenGL學習筆記-2015.4.1——紋理載入與控制
在紋理貼圖技術問世之前,虛擬3維世界只能通過幾何模型去模擬現實,可想而知,現實世界的錯綜複雜,計算量之大並不能滿足實時顯示的需求。紋理對映帶來了革命性的變換,簡單的使得虛擬的3維世界得以無限接近於現實。紋理對映技術最早是由Catmull 在1947年率先提出的,Catmul
vue學習總結二:專案前期準備工作
當我們構建完專案之後不要急於開始寫程式碼,一些準備工作還是必須要先完成的,比如:因為我們是做的移動端單頁面的專案,會存在300ms的點選延遲問題,改怎麼解決?由於各遊覽器廠商對不同html標籤的樣式具有不同的初始化定義,因此我們要做到遊覽器相容性的話就必須要統一初始化一個樣式
openGL之光照1---openGL學習筆記(九)
光的的成分包括三種: ①環境光:(ambient)沒有方向,向四周均勻發散,全域性因素。 ②散射光:(diffuse)具有方向性,根據入射光角度均勻反射開來,物體表面的顏色主要取決於散射光。 ③鏡面光:(specular)具有很強的方向性。 opneGL中的光照同樣
avalonjs 學習筆記1---checkbox
nod item ack lex server ini npm 學習 define 一、vscode 安裝使用 1.vs code+node.js下載安裝 2.在node.js command prompt 中運行 npm install -g live-server 3
微信小程序學習筆記1
接口 spa class 搭建 name demo title 更新數據 navigate 初步接觸微信小程序開發 微信小程序的開發環境 微信小程序是運行在微信環境中的應用,它只能在微信中運行,不能運行在瀏覽器等其他環境中,微信團隊提供了專門開發工具用於小程
mysql學習筆記(1-安裝簡介)
配置文件 服務器 二進制 mysql 通用 mysql的安裝方式:(1)通過系統提供的默認版本(穩定版,該版本滿足了使用的需求,建議使用,os vendor)(2)mysql官方提供 官方提供的通用rpm安裝包 官方提供的文件,以文件覆蓋的方式安裝 源碼包編譯安裝
Python學習筆記1
bsp 面向對象 解釋型 基本 ges mon xxx str text 一、什麽是Python Python是面向對象、解釋型的計算機語言;語法簡潔、優雅、易學。 在1989誕生,Guido(龜叔)開發。龜叔非常喜歡一部叫做《Monty Python飛行馬戲團》的
java 學習筆記1
跨平臺原理 所有 com 路徑 運行機制 main 單位 width rtu 、 高級語言運行機制 高級語言按程序的執行方式分為編譯型和解釋型兩種。 java語言比較特殊,Java程序的執行必須經過先編譯後解釋的步驟。 1 編譯生成字節碼,只面向JVM(.class) 2J
Java Web學習筆記-1
根路徑 text .get set 接口 context cat 方法 web應用 1.servlet理論上可以處理多種形式的請求響應形式 ,http只是其中之一 ,所以HttpServletRequest、 HttpServletResponse分別是ServletReq
Redis學習筆記1--入門篇
ase list ica cati ctu apple string replace first 一、Redis簡介: Redis(http://redis.io)是一款開源的、高性能的鍵-值存儲(key-value store),它是用ANSI C來編寫。Redis的項目