本文主要對(duì)之前學(xué)過(guò)的一些東西進(jìn)行總結(jié),梳理其中的知識(shí)點(diǎn)洽洁,加深記憶。
通過(guò)之前的學(xué)習(xí)菲嘴,現(xiàn)在你應(yīng)該學(xué)會(huì)了創(chuàng)建一個(gè)使用OpenGL的窗口饿自,實(shí)現(xiàn)著色器,將頂點(diǎn)數(shù)據(jù)傳遞給著色器龄坪,使用紋理昭雌,理解向量和矩陣的作用,創(chuàng)建一個(gè)3D場(chǎng)景并在其中自由漫步健田。
基于我們已經(jīng)學(xué)到的東西烛卧,我們可以做更多的研究。比如抄课,我們理解了觀察矩陣生成的原理唱星,那是否可以嘗試封裝一個(gè)類似lookAt的函數(shù)來(lái)驗(yàn)證我們的原理呢雳旅?這些都是很有趣的事跟磨,筆者覺(jué)得興奮極了。不過(guò)攒盈,先得梳理一下知識(shí)才行抵拘。
知識(shí)點(diǎn)
OpenGL:一套圖形API規(guī)范,由不同的廠商實(shí)現(xiàn)內(nèi)容型豁。
GLAD:一個(gè)用于獲取OpenGL函數(shù)地址的三方庫(kù)僵蛛。
視口(viewport):我們渲染的窗口尚蝌。
圖形管線(Graphics Pipeline):一個(gè)頂點(diǎn)想要被繪制到屏幕上需要走的流程。
著色器(Shader):一小段運(yùn)行在圖形卡(顯卡)上的程序充尉。圖形管線中的某些階段可以用自定義的著色器去替代原有的著色器飘言。
頂點(diǎn)(vertex):代表一個(gè)點(diǎn)的數(shù)據(jù)集。
頂點(diǎn)緩存對(duì)象(VBO, Vertex Buffer Object):用于分配內(nèi)存驼侠,保存頂點(diǎn)數(shù)據(jù)給圖形卡使用的一種緩存對(duì)象姿鸿。
頂點(diǎn)數(shù)組對(duì)象(VAO, Vertex Array Object):保存緩存以及頂點(diǎn)屬性狀態(tài)信息。
元素緩存對(duì)象(EBO, Element Buffer Object):保存頂點(diǎn)索引的一種緩存對(duì)象倒源。
Uniform:GLSL的一種特殊類型苛预,可以由程序訪問(wèn),也可以由著色器訪問(wèn)笋熬,是程序和著色器的一種“溝通”渠道热某。
紋理(Texture):貼在物體表面的圖片,用于模擬物體的細(xì)節(jié)胳螟。
紋理環(huán)繞(Texture Wrapping):告訴OpenGL在指定的紋理坐標(biāo)超出(0,1)范圍時(shí)如何采樣昔馋。
紋理過(guò)濾(Texture Filtering):指明有多個(gè)紋素可以使用的時(shí)候如何進(jìn)行采樣。通常發(fā)生在紋理被放大的時(shí)候糖耸。
Mipmaps:一系列不同尺寸的小圖片绒极,隨著物體距離觀察者遠(yuǎn)近情況取用。
stb_image:圖片加載3方庫(kù)蔬捷。
紋理單元(Texture Units):允許多個(gè)紋理作用在同一個(gè)物體上垄提。
向量(Vector):定義在三維空間中的點(diǎn)或者方向。
矩陣(Matrix):矩形數(shù)組的一種表示方式周拐。
GLM:OpenGL的一個(gè)數(shù)學(xué)庫(kù)
局部空間(Local Space):物體一開始存在的控件铡俐。所有的坐標(biāo)都相對(duì)于物體的原點(diǎn)。
世界空間(World Space):所有坐標(biāo)都相對(duì)于一個(gè)共同的原點(diǎn)妥粟。
觀察空間(View Space):所有的坐標(biāo)都從攝像機(jī)的視角觀察审丘。
裁剪空間(Clip Space):所有的坐標(biāo)都從攝像機(jī)的視角觀察,但是投影已經(jīng)應(yīng)用勾给。這個(gè)空間是頂點(diǎn)著色器輸出的階段滩报,OpenGL會(huì)處理剩下的事情。
屏幕空間(Screen Space):所有的坐標(biāo)都基于屏幕的原點(diǎn)播急。坐標(biāo)范圍從0到屏幕的寬高脓钾。
LookAt:一個(gè)特殊的矩陣,將物體轉(zhuǎn)換到觀察空間桩警。
歐拉角(Euler Angles):pitch(繞x軸)可训,yaw(繞y軸),roll(繞z軸)旋轉(zhuǎn)的三個(gè)量。