1

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

我的问题是 -
我希望两个原始对象是透明的,而生成的相交部分是不​​透明的,以便可以清楚地看到相交部分。

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

4

2 回答 2

1

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

 pDevice->SetRenderState( D3DRS_ALPHABLENDENABL, TRUE );

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

现在有多种不同类型的混合物可供您使用。最简单的是加法 alpha 混合设置,如下所示:

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

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

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

pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
于 2010-05-08T13:34:19.683 回答
0

据我所知,DirectX 不会为您做任何体积代数来计算两个对象之间的精确相交体积。

你能做的就是假装它:寻找阴影投射的解决方案。基本上假设相机位置是光源。假设您已经确定对象 A 与对象 B 相交,然后确定哪个对象更靠近相机。使用您选择的阴影投射方法,确定较远对象上的哪些网格面将成为较近对象的阴影。一旦确定哪些网格面在阴影中,将它们输入到渲染管道中,但通常是被照亮的。

于 2010-05-08T09:34:57.890 回答