0
glDrawArraysInstanced 함수를 사용하여 삼각형을 이중화하고 싶습니다. 둘 사이의 차이점은 MVP 매트릭스입니다. 그런 다음 FBO에 2 GL_COLOR_ATTACHMENT를 적용하고 glDrawBuffers (2, ...)를 활성화했습니다. fragmentShader에서 데이터를 출력 할 때 레이아웃 위치를 바꿈
내 버텍스 쉐이더 :
#version 430 core
layout (location = 0) in vec3 position;
uniform mat4 uModel;
uniform mat4 uView[2];
uniform mat4 uProjection[2];
out flat int ID;
void main()
{
gl_Position = uProjection[gl_InstanceID] * uView[gl_InstanceID] * uModel * vec4(position.x, position.y, position.z, 1.0);
ID = gl_InstanceID;
}
내 조각 쉐이더 :
#version 430 core
layout (location = 0) out vec3 color;
layout (location = 1) out vec3 color1;
in flat int ID;
void main()
{
if (ID == 0) color = vec3(1.0f, 0.5f, 0.2f);
if (ID == 1) color1 = vec3(1.0f, 0.0f, 0.0f);
}
결과는이 : 4 triangles..
그것은 각 인스턴스화는 색상을 구현 한 것으로 보인다 color1 문. 'if'문이 유효하지 않습니까? 그리고 내 질문은 fbo 및 한 패스 중에 출력 대상이 얼마나 제한되는지입니다.
ID가 입력이 아닌 유니폼 인 경우 쓰기 마스크를 사용하여 특정 버퍼에 대한 쓰기를 해제 할 수 있습니다. –
답장을 보내 주셔서 감사합니다. 지금 당장 시도해 보겠습니다.하지만 조금 낭비가되는 것 같습니다 ... –
새로운 질문 .... 말하자면, 셰이더가 모든 출력에 쓸 경우 왼쪽과 오른쪽은 같은 색 삼각형이되어야하고, '오렌지색' '빨간색'과 '빨간색' '오렌지색'이 될 것입니다. 그렇다면 'if'문은 유효하지 않습니까? –