Opengl : 대상을 바꾸지 않고 rgba-> rgba 블리팅을하는 방법 Alpha

StackOverflow https://stackoverflow.com/questions/146140

  •  02-07-2019
  •  | 
  •  

문제

나는 OpenGL RGBA 텍스처를 가지고 있으며 프레임 버퍼 객체를 사용하여 또 다른 RGBA 텍스처를 블립합니다. 문제는 일반적인 블렌드 기능을 사용하는 경우glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),결과적인 블릿은 대상 텍스처 알파가 변경되도록하여 이전에 알파가 1 인 장소에 대해 약간 투명하게 만듭니다. 나는 대상 표면 알파가 절대 변하지 않기를 원하지만 그렇지 않으면 RGB 값에 미치는 영향은 정확히 비슷해야합니다. GL_SRC_ALPHA 그리고 GL_ONE_MINUS_SRC_ALPHA. 따라서 블렌드 계수 함수는 (AS, AS, 0) 및 (1-AS, 1-AS, 1-AS, 1)이어야합니다. 어떻게 달성 할 수 있습니까?

도움이 되었습니까?

해결책

RGB 및 알파의 블렌드 모드를 다른 방정식으로 설정할 수 있습니다.

void glBlendFuncSeparate(
    GLenum srcRGB, 
    GLenum dstRGB, 
    GLenum srcAlpha, 
    GLenum dstAlpha);

귀하의 경우 다음 열거를 사용하려고합니다.

  glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ZERO, GL_ONE);

glblendfuncseparate 함수를 확장자로 가져와야 할 수도 있습니다. 그래도 그렇게하는 것이 안전합니다. 기능은 매우 오랫동안 주변에 있습니다. OpenGL 1.4의 일부입니다

동일하게하는 또 다른 방법은 glcolormask를 사용하여 알파 채널에 쓰기를 비활성화하는 것입니다.

void glColorMask( GLboolean red,
                  GLboolean green,
                  GLboolean blue,
                  GLboolean alpha )

그것 ~할 수 있었다 OpenGL-Drivers가 가장 일반적으로 사용되는 기능을 최적화하고 GlcolorMask는 거의 사용되지 않는 OpenGL-Finction 중 하나이기 때문에 GLBLENDFUNCSEPARATE보다 훨씬 느리게하십시오.

운이 좋지 않으면 홀수 볼 기능을 호출하여 소프트웨어 렌더링 에뮬레이션으로 끝날 수도 있습니다 :-)

다른 팁

아마 당신은 사용할 수 있습니다 Glcolormask()? 네 가지 색상 구성 요소 각각에 쓰기를 활성화/비활성화하겠습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top