2014-03-06 7 views
0

배경 텍스처 위에 렌더링되는 입자 시스템이 있습니다. 각 입자는 정사각형이며 텍스처가 적용되지 않으며 모두 같은 색상입니다. 배경은 회색 음영 질감입니다. 내가 뭘 하려는지 Gimp와 같은 응용 프로그램에서 알려진 블렌딩과 같은 유형의 블렌드 모드입니다.OpenGL ES 색상 혼합 모드

기본적으로 입자로 덮힌 배경 영역은 휘도를 유지해야하지만 입자의 색상을 채택해야합니다. glBlendFunc() 매개 변수의 여러 조합을 시도하고 glTexEnv 함께 어지러운 시도했지만 그것을 이해하는 데 많은 문제가 있습니다. 현재 두 개의 입자가 겹치면 glBlendFunc 매개 변수에 따라 밝거나 어두워집니다.

저는 android에서 OpenGL ES 1.1을 사용하고 있습니다. OpenGL ES 2.0을 사용하지 않고도이 효과를 얻을 수있는 방법이 있습니까? 그렇다면 무엇입니까?

답변

0

glBlendFunc는 분리 가능한 블렌드 모드 만 지원합니다. 색조 전용 블렌딩은 분리 할 수 ​​없으므로 표준 OpenGL에서 표현할 수 없습니다. 엔비디아의 마크 킬 가드에 의해 this presentation를 참조하십시오 (41)

는 엔비디아가 GL_HSL_HUE_NVGL_HSL_COLOR_NV 토큰은 당신이 설명하는 작업을 수행하기 위해 추가의 새로운 GPU에서 확장 NV_blend_equation_advanced라고 (포함. 테그 라를) 제공 밀어 넣습니다. OpenGL ES 1.1에 대한 지원을 유지하기를 원한다면이 옵션은 실제로는 선택 사항이 아닙니다. 그러나

은 주어진 당신이 묘사하는 효과를 달성 할 수있는 방법이있을 수 있습니다 당신의 배경은 그레이 스케일 것을 :

  1. 의 휘도를 극대화 HSL 색 공간
  2. 에 RGB에서 파티클 색상을 변환 HSL (예 : 1.0 0.5로 설정)
  3. RGB로 변환. 입자의 색으로 배경을 칠하면서 glBlendFunc(GL_DST_COLOR, GL_ZERO)

이 휘도를 유지해야한다 : 이것은

  • 는 곱셈 혼합 작업으로 입자 페인트 실제 입자 색상 될 것입니다.

    편집 : glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR)은 도움이 될 수있는 2 * source * 대상 색상을 제공합니다.

    편집 2 :

    1. 그것은 내가 지난 glTexEnv을 사용하기 때문에 10 년 이상되었습니다 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE)

    사용하여 입자를 렌더링 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE)

  • 와 배경을 렌더링 다음과 같이 glTexEnvf을 시도하지만,이 수도 자신이하려는 것을 달성 할 수있는 매개 변수의 조합이되어야합니다.

  • +0

    2 단계에서 HSL의 휘도를 최대화하면 순수한 흰색을 얻지 못합니까? RGB로 다시 변환하면 (255,255,255)가됩니다. 그래서 HSV 색상 공간을 사용하여 값을 최대화하려고 시도했지만 입자가 겹치면 배경이 어두워집니다. – Davide

    +0

    당신은 HSL에서 1.0이 아니라 0.5의 밝기이어야합니다 (이것은 순수한 흰색 임). 값이 1.0 인 HSV는 동일한 결과를 제공해야합니다. 순수한 색상을 이용한 곱셈은 밝기의 변화가 없어야한다는 아이디어입니다.이는 순수한 색상에만 적용됩니다 (예 : RGB = (255,0,0)로 쉽게 확인할 수 있음). –

    +0

    원하는 효과를 얻을 수 있지만 색상 (255,0,0), (0,255,0) 및 (0, 0, 255). HSL에서 (288º, 100 %, 50 %)와 같이 (204,0,255)를 사용하면 겹치는 부분이 더 어두워집니다. – Davide