여기에서 레거시 시스템을 다루므로 셰이더는 사용할 수 없습니다.OpenGL에 해당하는 DirectX 렌더 스테이트
수정해야 할 코드에는 디스플레이의 대부분이 텍스처로 렌더링되고 그 텍스처가 화면에 그려지는 렌더링 파이프 라인이 있습니다. 처음에는 텍스처로 렌더링 된 적이없는 것처럼 보입니다.
그것은이 함수를 호출하여 다이렉트에서이를 수행 :
void RenderTargetChanged(bool isRenderToTexture)
{
if (!isRenderToTexture)
{
gDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
gDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SRCBLENDALPHA,D3DBLEND_SRCALPHA);
gDevice->SetRenderState(D3DRS_DESTBLENDALPHA,D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE,FALSE);
}
else
{
gDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
gDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SRCBLENDALPHA, D3DBLEND_ONE);
gDevice->SetRenderState(D3DRS_DESTBLENDALPHA, D3DBLEND_INVSRCALPHA);
gDevice->SetRenderState(D3DRS_SEPARATEALPHABLENDENABLE, TRUE);
}
}
는 OpenGL 상응하는 무엇입니까 (공지 사항, 두 지점 사이의 유일한 차이는 D3DRS_SRCBLENDALPHA 및 D3DRS_SEPERATEALPHABLENDENABLE의 값이다)?
나는 서로 다른 조합을 시도해 보면서 미쳐 버렸습니다. 그리고 CLOSE를 얻을 수는 있지만, 처음에는 텍스처로 렌더링되지 않은 것처럼 보입니다. 반투명 어느 곳이든 어둡거나 밝은 곳으로갑니다.