OpenGL Sharders(着色器) 入门
生活随笔
收集整理的這篇文章主要介紹了
OpenGL Sharders(着色器) 入门
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
著色器(Shader)是運行在GPU上的小程序。這些小程序為圖形渲染管線的某個特定部分而運行。
// 頂點著色器 #version 330 core // 0號欄位讀取頂點坐標 layout (location = 0) in vec3 aPos; //1號欄位讀取顏色顏色 layout (location = 1) in vec3 aColor; // 輸出給 片段著色器 out vec4 vertexColor; void main() { // gl_Position 是固定的名稱 用來保存 頂點坐標的gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0); vertexColor = vec4(aColor.x,aColor.y,aColor.z,1.0); }// 片段著色器 #version 330 core // 輸出一個 vec4類型的變量 out vec4 FragColor; // 從cpu中讀取 uniform vec4 outColor; //從頂點著色器中獲得 in vec4 vertexColor; void main() { FragColor = vertexColor; }詳細的著色器內(nèi)容查看文檔
多元色四邊形
效果
代碼
uniform
Uniform是一種從CPU中的應用向GPU中的著色器發(fā)送數(shù)據(jù)的方式,但uniform和頂點屬性有些不同。首先,uniform是全局的(Global)。全局意味著uniform變量必須在每個著色器程序?qū)ο笾卸际仟氁粺o二的,而且它可以被著色器程序的任意著色器在任意階段訪問。第二,無論你把uniform值設置成什么,uniform會一直保存它們的數(shù)據(jù),直到它們被重置或更新。
下面是使用uniform向著色器賦值
//通過glfwGetTime()獲取運行的秒數(shù)。 float timeValue = glfwGetTime(); //然后我們使用sin函數(shù)讓顏色在0.0到1.0之間改變,最后將結果儲存到greenValue里。 float greenValue = (sin(timeValue) / 2.0f) + 0.5f; // 我們用glGetUniformLocation查詢uniform ourColor的位置值 int vertexColorlocation = glGetUniformLocation(shaderProgram, "outColor");// -1表示未找到 // 使用著色器程序 glUseProgram(shaderProgram); // glUniform4f函數(shù)設置uniform值 第一個參數(shù)是位置 后面幾個是rgb glUniform4f(vertexColorlocation, 0, greenValue, 0, 1.0f);總結
以上是生活随笔為你收集整理的OpenGL Sharders(着色器) 入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BinderHub 使用简介
- 下一篇: openssl ssl_write 写错