我正在使用directx。我在窗口上显示两个对象。它们相互交叉。我找到了相交的物体。
我的问题是 - 我希望两个原始对象是透明的,并且得到的相交部分是不透明的,这样可以清楚地看到相交的部分。
我发现了一些与透明度相关的问题,但它们与窗口的透明度有关。但我希望对象是透明的。
答案 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相交,则确定哪个对象更靠近相机。使用您选择的阴影投射方法,确定距离较远的对象上的哪些网格面将成为较近对象的阴影。确定阴影中的哪些网格面后,将它们提供到渲染管道中,但通常会点亮。