2013-06-28 2 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;\ 
}"; 

따라서 그 색상과 동일한 색상으로 각 객체입니다. 아무도 어떻게 색을 다르게 표현할 수 있습니까? 모든 객체의 색상으로 구성된 2D 배열을 준비했습니다. 조각 쉐이더로 전달하는 방법이나 조각 쉐이더 및 버텍스 쉐이더 코드를 변경하는 방법을 알아낼 수 없습니까?

답변

1

개체를 개별적으로 색칠하는 가장 좋은 방법은 각 개체에 대해 원하는 색이 들어있는 유니폼 (예 : myPMVMatrix)을 전달하는 것입니다. 조각 쉐이더에서 uniform vec4 objectColor을 직접 사용할 수 있습니다. gl_FragColor입니다.

조각 쉐이더과 같습니다

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

당신이 당신의 myPMVMatrix을 통과처럼 당신은 단지 단어 대신 myPMVMatrixmyColor로 정확히 전달할 것입니다.

+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