【OpenGL从入门到精通】Shader专题
詳解GPU的工作流程
1.shader通常稱為著色器,作用是把CPU上的點(diǎn)渲染出來。
2.shader是并行的。
3.流程:數(shù)據(jù)data (頂點(diǎn)數(shù)據(jù)) ----->VS(輸入:data的頂點(diǎn)數(shù)據(jù),輸出:gl_Position的 vec4 頂點(diǎn)數(shù)據(jù))----->光柵化處理(顯卡自動(dòng)負(fù)責(zé),把點(diǎn)連成生成面,其中包括一定像素)------>FS(輸入:光柵器的輸出的像素,輸出畫面);注意VS和FS點(diǎn)會(huì)同時(shí)被并行執(zhí)行,多個(gè)點(diǎn)可以同時(shí)處理。
最簡(jiǎn)單的Shader代碼
1.Vertext shader (頂點(diǎn)著色器)
attribute vec4 position; //vec4是齊次坐標(biāo) uniform mat4 U_ModelMatrix; //mat4是4x4矩陣 ,模型矩陣需要從C++傳遞過來 uniform mat4 U_ViewMatrix; //視口矩陣需要從C++傳遞過來 uniform mat4 U_ProjectionMatrix; //投影矩陣需要從C++傳遞過來 void main(){//自右向左,模型空間下的點(diǎn)-》世界坐標(biāo)系-》視口矩陣轉(zhuǎn)到視口空間,攝像機(jī)看到的帶你-》屏幕空間gl_Position=U_ProjectionMatrix*U_ViewMatrix*U_ModelMatrix*position; }2.Fragment shader (片元著色器)
void main(){gl_FragColor=vec4(1.0,1.0,1.0,1.0); //gl_FragColor是輸出點(diǎn)的顏色 }VBO和VAO函數(shù)的區(qū)別
1.向Vertext shader中傳輸頂點(diǎn)數(shù)據(jù)時(shí),需要使用VBO是用來加載CPU上的相關(guān)頂點(diǎn)數(shù)據(jù)
GLuint vbo;//vertex buffer object 存放頂點(diǎn)緩沖區(qū)的對(duì)象glGenBuffers(1,&vbo);//需要1個(gè)VBO,把vbo寫入到顯卡進(jìn)去,供后續(xù)操作glBindBuffer(GL_ARRAY_BUFFER,vbo);//把vbo設(shè)置的奧卡槽上//glBufferData(GL_ARRAY_BUFFER,sizeof(Vectice)*3, nullptr,GL_STATIC_DRAW);//只在GPU上開辟內(nèi)存不傳數(shù)據(jù)//glBufferSubData(GL_ARRAY_BUFFER,0,sizeof(Vectice)*3,vertices);//加入數(shù)組,0指vbo偏移位置glBufferData(GL_ARRAY_BUFFER,sizeof(Vectice)*3,vertices,GL_STATIC_DRAW);//cpu -> gpu,向GL_ARRAY_BUFFER加入數(shù)據(jù)glBindBuffer(GL_ARRAY_BUFFER,0);//卡槽重新綁定,防止誤操作2.多個(gè)VBO的集合稱為VAO
Shader如何傳入頂點(diǎn)坐標(biāo)
?
詳解Attribute和Uniform關(guān)鍵字
1Uniform,使用的一些變量都是一樣的使用Uniform。?
2.Attribute,隨著屬性組變化使用Attribute。
3. OPenGLES2.0最多支持8個(gè)屬性組,3.0支持16個(gè)。
詳解3D渲染管線
1.MVP(M,模型矩陣;V,視口矩陣;P,投影矩陣)
自右向左,模型空間下的點(diǎn)-》世界坐標(biāo)系-》視口矩陣轉(zhuǎn)到視口空間,攝像機(jī)看到的帶你-》屏幕空間
總結(jié)
以上是生活随笔為你收集整理的【OpenGL从入门到精通】Shader专题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 10t等于多少g 10t等于100000
- 下一篇: 【OpenGL从入门到精通(六)】纹理对