2012-06-25 3 views
0

GetFrontBufferData 메서드를 사용하여 .tga 이미지를 저장하려고했지만 알파 값이 손실되었습니다. 이들은 모두 하나입니다. RenderTarget 또는 BackBuffer에서 오른쪽 알파 값을 얻을 수 있지만 rgb 값이 올바르지 않습니다. 즉시 표시, backbuffer 여전히 frontbuffer보다 어둡게 보인다.
이제 2 가지 질문이 있습니다.
Q1 : FrontBuffer에 알파 값이 있습니까?
Q2 : 투명하게 렌더링하려고 할 때 백 버퍼와 프런트 버퍼의 데이터의 차이점은 무엇입니까?
FrontBuffer에 알파 값이 있습니까?

답변

0

투명 오브젝트를 렌더링 할 때 해당 알파 값은 알파 블렌딩을 수행하는 데 사용됩니다. 블렌딩이 완료되면 새 값이 백 버퍼에 기록됩니다. 알파 값을 유지하려는 경우 백 버퍼의 형식은 D3DFMT_A8R8G8B8이어야합니다. IDirect3DDevice9::Clear()을 호출하는 동안 알파 채널을 지우는 것에 대해서도 기억해야합니다. 렌더링이 완료되면 백 버퍼와 프론트 버퍼 포인터는 단순히 뒤집 힙니다 (read more). 따라서 두 버퍼의 형식이 동일합니다 (따라서 RGBA 형식의 백 버퍼를 만든 경우 프런트 버퍼도 RGBA가됩니다). 그런데 백 버퍼를 가져 와서 프론트 버퍼를 가져 오는 대신 잠글 수 있습니다.

기본적으로 알파 블렌딩은 R, G, B 및 A 채널에서 동일한 작업을 수행하지만 알파 채널에만 별도의 작업을 지정할 수 있습니다 (see this).

+0

감사합니다. 지금 D3DRS_SEPARATEALPHABLENDENABLE (을)를 사용하고 있습니다.
April

+0

그러나 플립은 항상 드라이버에 의해 구현되는 방법이 아닙니다. 현실적으로 프론트 버퍼에 알파 채널이 존재하는 것은 "정의되지 않음"입니다. 그러나 프론트 버퍼는 알파 버퍼가 필요한 이유를 알지 못하기 때문에 완전히 렌더링 된 장면만을 포함해야합니다 ... – Goz