頂點著色器
片段著色器
這個長方形所覆蓋到的每一個像素式曲,都會調(diào)用一次fragment shader妨托。片段著色器的責(zé)任是計算燈光,以及更重要的是計算出每個像素的最終顏色吝羞,F(xiàn)ragment是可以被渲染到屏幕上的像素點兰伤,fragment shader即用于計算每個像素的顏色等屬性
-
精度
Paste_Image.png Uniform是全局變量,可用于vertex shader和fragment shader钧排。在vertex shader中通常是變換矩陣敦腔、光照參數(shù)、顏色等恨溜,会烙。在fragment shader中通常是霧化參數(shù)负懦、紋理參數(shù)等
連接Vertex Shader和Fragment Shader成一個完整的OpenGL Shader Program
過程:
一些函數(shù)
void glBufferData (GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage);
參數(shù) target:與 glBindBuffer 中的參數(shù) target 相同;
參數(shù) size :指定頂點緩存區(qū)的大小柏腻,以字節(jié)為單位計數(shù)纸厉;
data :用于初始化頂點緩存區(qū)的數(shù)據(jù),可以為 NULL五嫂,表示只分配空間颗品,之后再由 glBufferSubData 進(jìn)行初始化;
usage :表示該緩存區(qū)域?qū)蝗绾问褂?/strong>沃缘,它的主要目的是用于提示OpenGL該對該緩存區(qū)域做何種程度的優(yōu)化躯枢。其參數(shù)為以下三個之一:
GL_STATIC_DRAW:表示該緩存區(qū)不會被修改;
GL_DyNAMIC_DRAW:表示該緩存區(qū)會被周期性更改槐臀;
GL_STREAM_DRAW:表示該緩存區(qū)會被頻繁更改锄蹂;
如果頂點數(shù)據(jù)一經(jīng)初始化就不會被修改,那么就應(yīng)該盡量使用 GL_STATIC_DRAW水慨,這樣能獲得更好的性能得糜。-
glDrawArrays(GL_TRIANGLES, 0, 3);
GL_TRIANGLE_STRIP
Paste_Image.png
Paste_Image.png
GL_TRIANGLE_FAN(扇形): T = [n-1 n-2 n] 1 2 3 4, (GLvoid *)(sizeof(float) *3) 即頂點顏色數(shù)據(jù)在VBO中的偏移量為3個float的大小,即兩個相鄰的頂點顏色數(shù)據(jù)之間的間隔為Vertex結(jié)構(gòu)體中的頂點位置數(shù)據(jù)大小晰洒。由此也可看出朝抖,該偏移量是針對每個頂點數(shù)據(jù)而言的。在OpenGL的世界中谍珊,都是針對一個個位置或像素進(jìn)行繪制的治宣。
圖片的像素化
- 要(幾何圖形)讓點線面,變成能在屏幕上顯示的像素砌滞,就需要Rasterize這個過程
- 光柵化是把GPU的操作轉(zhuǎn)到CPU上了侮邀,生成位圖緩存,直接讀取復(fù)用贝润。
- 當(dāng)使用圓角绊茧,陰影,遮罩的時候题暖,圖層屬性的混合體被指定為在未預(yù)合成之前不能直接在屏幕中繪制按傅,所以就需要屏幕外渲染被喚起。