2009-08-23 7 views
2

이것은 내 마지막 question과 관련됩니다.텍스처로 렌더링 할 때 이미지 블렌딩 문제가 발생했습니다.

http://img252.imageshack.us/img252/623/picture8z.png

  1. 나는 흰색 배경 (색상 = (1, 1, 1, 1))를 그릴 :이 이미지를 얻을 수 있습니다.

  2. 내가 색상 = (1, 0, 0, .8)와 두 왼쪽 상단 사각형에 텍스처 렌더링과 기능 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)를 혼합 한 다음 색상 = (1, 1, 1, 1)과 질감을 그리고 기능 (GL_ONE, GL_ONE_MINUS_SRC_ALPHA)을 혼합.

  3. 나는 색상 = (1, 0, 0, .8) 및 혼합 기능 (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)으로 오른쪽 아래 정사각형을 그립니다. 내 계산에 의해

, 렌더 - 투 - 텍스처 사각형 흰색 배경에 그 질감을 그린 후 색

.8 * (1, 0, 0, .8) + (1 - .8) * (0, 0, 0, 0) = (.8, 0, 0, .64) 

등을해야한다, 그들은 색상을 가져야한다

(.8, 0, 0, .64) + (1 - .8) * (1, 1, 1, 1) = (1, .2, .2, .84) 

오른쪽 아래 정사각형은 색이 있어야합니다.

.8 * (1, 0, 0, .8) + (1 - .8) * (1, 1, 1, 1) = (1, .2, .2, .84) 

동일하게 보일 것입니다! 내 추론이 잘못 되었나요? 계산이 잘못 되었나요?

어쨌든 내 목표는 내 장면의 일부를 캐시하는 것입니다. 텍스처를 렌더링하고 텍스처를 그려서 장면을 인라인으로 그리는 것과 같은 방법은 무엇입니까?

답변

4

혼합 된 내용을 텍스처에 렌더링하고 그 텍스처를 화면에 합성하려면 가장 간단한 방법은 미리 곱셈 된 알파를 사방에 사용하는 것입니다. 상대적으로 간단합니다. 예를 들어 반투명 사각형의 색상은 (0.8, 0, 0, 0.8)이며이 값을 (0, 0, 0, 0)과 (GL_ONE , GL_ONE_MINUS_SRC_ALPHA)는 본질적으로 사각형의 색상을 텍스처로 전달합니다. 불투명 한 흰색 위에 (GL_ONE, GL_ONE_MINUS_SRC_ALPHA)와 혼합 (0.8, 0, 0, 0.8)하면 (1.0, 0.2, 0.2, 1.0) 나타납니다. 색상 채널은 세 번째 계산과 동일하지만 알파 채널은 여전히 ​​1.0이므로 블렌드 객체로 덮여있는 불투명 한 객체에 대해 기대할 수 있습니다.

톰 포 시스 (Tom Forsyth)는 미리 곱셈 된 알파에 대해 좋은 article을 가지고 있습니다. 모든 것은 읽을만한 가치가 있지만 일반적으로 수학이 작동하는 이유에 대한 설명은 "반투명 레이어 합성"섹션을 참조하십시오.

0

내 계산이 잘못되었습니다. 두 번째 줄은 정말 (내가 (1, .2, .2, .8) 색상을 마지막으로 광장을 변경하면 세 개의 사각형이 같은 색으로 표시) 내가 볼 일치하는 것 같다

(.8, 0, 0, .64) + (1 - .64) * (1, 1, 1, 1) = (1, .36, .36, .84) 

해야한다.

0

마지막 질문 : 장면의 일부분을 텍스처로 바꾸는 것은 쉽지 않습니다. 좋은 출발점은 Stefan Jeschke의 PhD thesis입니다.

관련 문제