2013-06-28 81 views
0

我在場景中有很多對象,我想用不同顏色爲每個對象着色。現在,我的片段着色器包括:着色3D對象

void main (void)\ 
{\ 
    gl_FragColor = vec4(0.82, 0.41, 0.12 ,1.0);\ 
}"; 

和頂點着色器包括:

attribute highp vec4 myVertex;\ 
uniform mediump mat4 myPMVMatrix;\ 

void main(void)\ 
{\ 
gl_Position = myPMVMatrix * myVertex;\ 
}"; 

,因此它的色彩搭配同色系的每個對象。任何人都可以告訴我如何着色不同?我準備了一個由所有對象的顏色組成的二維數組。我不知道如何將它們傳遞給片段着色器,或者如何更改片段着色器和頂點着色器代碼?

回答

1

單獨爲對象着色的最佳方式是爲每個對象傳遞一個包含所需顏色的制服(就像您使用myPMVMatrix一樣)。 您可以在片段着色器中使用uniform vec4 objectColor,您可以直接使用inf gl_FragColor

片段着色器看起來像:

uniform mediump vec4 myColor;\ 
void main (void)\ 
{\ 
    gl_FragColor = myColor;\ 
}"; 

,你就確實通過它就像你通過你的myPMVMatrix,隻字myColor,而不是myPMVMatrix

+0

頂點着色器和片段着色器代碼將如何更改。你可以通過編寫着色器的代碼來解釋嗎?另外,我將如何從我的主要功能中傳遞顏色? – Hellboy

+0

我通過矩陣: int i32Location = glGetUniformLocation(m_uiProgramObject,「myPMVMatrix」); glUniformMatrix4fv(i32Location,1,GL_FALSE,PMVMatrix.ptr()); 但是,這不會將矩陣傳遞給頂點着色器嗎?我不需要在頂點着色器中使用變量myColor嗎?您不需要: – Hellboy

+0

:glGetUniformLocation也可以在片段着色器中找到變量的位置。如果你只是做一個glGetUniformLocation(m_uiProgramObject,「myColor」);和glUniform3fv(...)這應該發送你的變量到正確的着色器。 – WhitAngl

相關問題