日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenGL从入门到精通】Shader专题

發(fā)布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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专题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。