從頂點數據中傳入頂點位置和頂點顏色
阿新 • • 發佈:2018-11-03
設置 inter 發送 cor pan 配置 技術分享 com 頂點
一、目的:不需要在著色器中指定圖形的顏色,直接在頂點數據中指定顏色
//畫三角形的頂點數組
float vertices[] = {
//位置 //顏色
-0.5f, -0.5f, 0.0f,1.0f,0.0f,0.0f,
0.5f, -0.5f,0.0f,0.0f,1.0f,0.0f,
0.0f,0.5f,0.0f,0.0f,0.0f,1.0f
};
二、
由於現在有更多的數據要發送到頂點著色器,我們有必要去調整一下頂點著色器,使它能夠接收顏色值作為一個頂點屬性輸入。需要註意的是我們用layout
標識符來把aColor屬性的位置值設置為1:
頂點著色器:
1 #version 330 core2 layout (location = 0) in vec3 aPos; // 位置變量的屬性位置值為 0 3 layout (location = 1) in vec3 aColor; // 顏色變量的屬性位置值為 1 4 5 out vec3 ourColor; // 向片段著色器輸出一個顏色 6 7 void main() 8 { 9 gl_Position = vec4(aPos, 1.0); 10 ourColor = aColor; // 將ourColor設置為我們從頂點數據那裏得到的輸入顏色 11 }
片元著色器:
#version 330 core outvec4 FragColor; in vec3 ourColor; void main() { FragColor = vec4(ourColor, 1.0); }
三、
因為我們添加了另一個頂點屬性,並且更新了VBO的內存,我們就必須重新配置頂點屬性指針。
1 // 位置屬性 2 glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0); 3 glEnableVertexAttribArray(0); 4 // 顏色屬性 5 glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6* sizeof(float), (void*)(3* sizeof(float))); 6 glEnableVertexAttribArray(1);
達到的效果:
從頂點數據中傳入頂點位置和頂點顏色