gbuffer 프레임 버퍼를 디버그하려고합니다. 나는 RGB 구성 요소를 쉽게 blit 할 수 있었지만 혼합하지 않고 alpha 구성 요소를 디버깅 할 수 있도록 alpha를 red 또는 rgb로 그레이 스케일로 다시 매핑하려고합니다. 이것을 할 수있는 방법이 있습니까? 미리 감사드립니다!OPENGL : blit을 사용하여 알파를 빨간색 채널로 옮길 수 있나요?
답변
단순히 단일 색상 채널을 표시하려면 glColorMask
이면 충분합니다.
glColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE);
당신이 다음 쉐이더를 통해 모든 실행, 그레이 스케일 효과를 2 개 색상 채널을 전환하거나 적용하려면 아마 가장 쉬운 방법입니다 방법 : 프레임 버퍼를 블리트의 그래서 instread
uniform sampler2D frame;
in vec2 uv;
out vec4 fragColor;
void main()
{
vec4 color = texture(frame, uv);
// Grayscale
color.rgb = vec3((color.r + color.g + color.b) * 0.33);
// Switch red and alpha channels
color.ra = color.ar;
fragColor = color;
}
, 당신은 바인딩 텍스처와 프레임 버퍼와 전체 화면 쿼드을 그립니다.
감사, Vallentin! 채널을 바꾸는 다른 방법은 없지만? 가능하다면 오버 헤드를 최소화하고 싶습니다. 명령을 사용하는 것이 좋을 것 같습니다. –
@KarimAbdelHamid 내가 기억하는 한, 존재하지 않는다. 또한 blitting은 전체 스크린 쿼드를 그리는 것보다 빠르지 만 느려질 수 있습니다. 그래서 평소에 그 일을하는 것이 낫습니다. 결론은 실제로 벤치 마크가되고 실제 성능에 문제가있는 경우입니다. – Vallentin
쿼드 루트로 가기로 결심했습니다. 감사! –
알파를 읽을 수없는 이유가 있습니까? –
@ Nicol 제 질문은 알파를 다른 채널로 옮기는 것에 관한 것입니다. RGB에 대한 값을 갖고 있다면 알파 채널을 사용하여 해독 할 수 있습니다. –