2013-03-31 7 views
3

OpenGL의 glBlendFunc에서 대상 RGB를 수평 확장 할 수 있습니까? (즉, (10,50,5)은 (20,100,10)OpenGL의 glBlendFunc

에 당신이 할 수있는 유일한 것은 당신이 사용하려는 경우 < 1)

+0

렌더 타겟을 블렌딩하기위한 연산이 컬러 값의 스케일링을 관리해야하는 이유를 알지 못합니다. 목적지 또는 소스 타겟의 rgb 값을 스케일하려는 경우 왜 출력을 생성하는 쉐이더에서 이것을 수행하지 않습니까? 또한, 정수 텍스처를 사용하지 않는 한 렌더 타겟의 구성 요소 값 (빨강, 초록, 파랑, 알파)은 불연속 범위 (예 : 0에서 255)를 차지하지 않지만 대신 0.0에서 255까지의 부동 소수점 값을 포함합니다. 1.0. –

+0

@SirDigbyChickenCaesar : 프래그먼트 셰이더는 대상 프레임 버퍼 값에 액세스 할 수 없습니다. 어쩌면 차세대 GPU가 "블렌딩 쉐이더"라고 불리는 새로운 쉐이더 스테이지를 도입 할 것입니다. 그러나 지금까지 블렌딩은 고정 배선 작업이었습니다. – datenwolf

+0

@SirDigbyChickenCaesar : 아, 그리고 FBO를 사용하고 FBOs 색상 첨부 텍스처를 조각 쉐이더에서 소싱하는 것이 좋습니다. 다음은 작동하지 않습니다. 텍스처를 텍스처 유닛과 FBO에 동시에 바인딩 할 수 없습니다. – datenwolf

답변

0

을 몇 가지 요인에 의해 곱 소스 RGB를 (추가 할 것 같다 이 블렌드 함수는 모든 그리기 연산/모든 객체 (물론 0이 아닌 초기 값을 가짐)에 대해 색상을 기하 급수적으로 해석하는 것입니다. 색상 버퍼에 쓰여진 것이 상수 인 경우 (예 : 2) 그래서 2로 곱 기본적으로 것이다 추가 한 것의 힘으로 지수에를 추가.

을 그런 다음 필요 아직 처리하지 않았다면 후 처리 단계를 도입하십시오. 거기에서 색상 값을 읽고 색상의 힘을 2로 사용하면 최종 색상을 얻을 수 있습니다.

물론 초기 값은 대수 여야합니다.

는하지만 (나는 장면에서 마지막 사람 희망)이 더 절차를 분할에만 에 대한 몇 가지 그리기 작업을 색상을 곱하려면 : 먼저 당신이 정상적인 색상을 사용하는 "정상"내용을 그릴 블렌딩. 그런 다음 색상을 로그 눈금으로 변환하고 (별도의 텍스처를 사용할 수 있습니다), 색상을 곱해야하는 다음 그리기 작업에 이것을 사용합니다 (그러나 OpenGL에 색상 추가를 지시 함). 힘. 물론

당신은 또한 당신이 자연 로그와 특급 기능을 사용하는 경우 기본으로 전자를 사용할 수 있습니다.