在屏幕上绘制两个物体A和B,A是半透明的,B是不透明的。观察视点离A较近。开启Alpha混合:
m_pIDirect3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,true);
m_pIDirect3DDevice->SetRenderState(D3DRS_BLENDOP,D3DBLENDOP_ADD);
m_pIDirect3DDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
m_pIDirect3DDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
m_pIDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0,0,0,255), 1.0f, 0);
如果先画A再画B,发现透过A看不见B,A后面只是黑色的背景。
如果先画B再画A,透过A就可以发现B的存在。
难道做Alpha混合时要先把场景中的每一个物体做排序吗?
如果B被包裹在A之中,好像排序也不能解决问题啊。
我在书上看到公式:
按照公式上的解释,不管以怎样的顺序都应该可以得到正确的效果啊。
我想问问,大家是怎样解决这个问题的。谢谢!