2016-06-09 66 views
-1

我在閱讀着色器和顏色,他們如何將它們定義爲頂點輸入。所以我folowed教程,並用混亂來是因爲該方案只是讀向前看,而不是進入下一行:Opengl程序無法識別第二個頂點輸入

GLfloat vertecies[] = { 
    //vertices    colors 
    0.5f, -0.5f, 0.0f,  1.0f, 0.0f, 0.0f,// Bottom Right 
    -0.5f, -0.5f, 0.0f,  0.0f, 1.0f, 0.0f,// Bottom Left 
    0.0f, 0.5f, 0.0f,  0.0f, 0.0f, 1.0f,// Top 
}; 

而這裏的下面的代碼,這應該是設置第二個頂點輸入的顏色:

glBindVertexArray(VAO); 
glBindBuffer(GL_ARRAY_BUFFER, VBO); 
glBufferData(GL_ARRAY_BUFFER, sizeof(vertecies), vertecies, GL_STATIC_DRAW); 

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO); 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index), index, GL_STATIC_DRAW); 

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0); 
glEnableVertexAttribArray(0); 

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat))); 
glEnableVertexAttribArray(1); 

glBindVertexArray(0); 

這是我的頂點着色器代碼:

const char* VertexShaderCode = 
"#version 330 core\r\n" 
"" 
"layout(location=0) in vec3 position;" 
"layout(location=1) in vec3 color;" 
"" 
"out vec3 theColor;" 
"" 
"void main()" 
"{" 
" gl_Position = vec4(position, 1.0);" 
" theColor = color;" 
"}"; 

而這裏的片段着色器代碼:

const char* FragmentShaderCode = 
"#version 330 core\r\n" 
"" 
"in vec3 theColor;" 
"" 
"out vec4 color;" 
"" 
"void main()" 
"{" 
" color = theColor;" 
"}"; 

告訴我,如果我做錯了什麼。

+2

步幅的第一指針應該是'6 *的sizeof(GLfloat)'對不對? –

回答

2

您的步幅乘數對於屬性索引0是錯誤的。它應該是6,因爲一個頂點包含3個位置元素和3個顏色元素。更換

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), (GLvoid*)0); 

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);