想让对象透明化

时间:2010-05-08 06:59:52

标签: directx 3d transparent

我正在使用directx。我在窗口上显示两个对象。它们相互交叉。我找到了相交的物体。

我的问题是 - 我希望两个原始对象是透明的,并且得到的相交部分是不​​透明的,这样可以清楚地看到相交的部分。

我发现了一些与透明度相关的问题,但它们与窗口的透明度有关。但我希望对象是透明的。

2 个答案:

答案 0 :(得分:1)

通过执行以下操作启用Alpha混合:

 pDevice->SetRenderState( D3DRS_ALPHABLENDENABL, TRUE );

将最终参数设置为FALSE以禁用它。

现在有多种不同类型的混合物供您使用。最简单的是加法α混合集如下:

 pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
 pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );

其他形式可能需要对多边形进行分类才能正确显示。

还值得注意的是,如果你想看到模型的背面,你需要将剔除模式设置为无:

pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );

答案 1 :(得分:0)

据我所知,DirectX不会为你计算两个物体之间的精确交叉体积做任何体积代数。

你可以做的就是伪造它:寻找阴影投射的解决方案。基本上假设相机位置是光源。假设您已确定对象A与对象B相交,则确定哪个对象更靠近相机。使用您选择的阴影投射方法,确定距离较远的对象上的哪些网格面将成为较近对象的阴影。确定阴影中的哪些网格面后,将它们提供到渲染管道中,但通常会点亮。