2017-11-22 2 views
0

내가 같은 블렌딩 방정식과 색상이 어떤 색상이 범위를 벗어나 갈 때 색상 혼합시 발생

Source color: (0.8f, 0.8f, 0.8f, 1.0) 
Destination color: (0.8f, 0.8f, 0.8f, 1.0) 
glBlendFunc(GL_ONE, GL_ONE); 
glBlendEquation(GL_FUNC_ADD); 

이 색을 계산 한 후 정규화해야하거나되고있다

예를 들어, 범위를 벗어난 이동 계수를 말해봐 클램프? GL 표준에서 정의한 것은 찾을 수 없습니다.

+2

블렌딩 중에는 아무 일도 일어나지 않을 것입니다. 프레임 버퍼의 데이터 형식으로의 변환은 나중에 발생합니다. 그리고 가능한 데이터 (클램핑)보다 큰 출력을 프래그먼트 쉐이더에서 작성하는 것처럼 똑같은 일이 일어납니다. 정확히 무슨 일이 주로 색상 버퍼의 형식에 따라 다릅니다. RGB32F 버퍼의 경우 많은 일이 발생하지 않습니다. – BDL

+0

@BDL, "많이 발생하지 않는다"는 것은 무엇을 의미합니까? '(1.0f, 0.0f, 0.0f, 1.0f)'가 있으면 나는 빨간색을 가지고있다. '(2.0f, 0.0f, 0.0f, 1.0f)'의 경우에 나는 어떤 색을 가집니까? – Narek

답변

1

일반적으로 색상 벡터는 GL에서 자동으로 "표준화"되지 않습니다. 이 작업은 색상 버퍼의 현재 형식에 대해 의미가 있으며 부동 소수점 형식을 사용하는 경우 절대로 고정되지 않으면 여러 조각 처리 단계에서 고정됩니다.

OpenGL 4.6 Core Profile specification : 17.3.6 블렌딩

부분 :

컬러 버퍼의 소스 구성 요소 및 대상 값 소수점 고정 혼합되면 요소 각각에 고정된다 [ 블렌드 방정식을 계산하기 전에 부호없는 정규화 또는 부호가있는 정규화 된 색상 버퍼에 대해 각각 [0,1] 또는 [-1, 1]을 사용합니다. 색상 버퍼가 부동 소수점 인 경우 클램핑이 발생하지 않습니다. 결과 값인 네 개의 값이 다음 작업으로 전송됩니다. 혼합이 사용되는 경우는 비 표준화 부동 소수점 컬러 버퍼를 사용하지 않는

그래서, 입력 값은 클램프된다. 그 결과는 블렌딩의은 클램프되지 않습니다.

다음 동작 섹션을 17.3.7의 sRGB 변환이다

가 가 가

[참고

: cl이 (혼합 단계의 결과 값) 연산의 입력 값이고, cs 인 sRGB 변환이 비활성화 된 경우 cs = cl 인 sRGB 변환 결과 값]

결과로 cs의 R, G 및 B 값과 수정되지 않은 A가 새로운 RGBA 색상 값을 형성합니다. 컬러 버퍼가 고정 소수점 인 경우 각 구성 요소는 범위 [0, 1]에 을 클램핑 한 다음 수식 2.3을 사용하여 고정 소수점 값으로 변환합니다. 결과로 나오는 4 개의 값은 후속 디더링 연산으로 보내집니다.

관련 문제