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