2010-05-08 76 views
1

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

我的问题是-
我想要两个原始物体是透明的,并且产生的相交部分是不​​透明的,这样可以清楚地看到相交的部分。

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

回答

1

您可以通过这样做使alpha混合:

pDevice->SetRenderState(D3DRS_ALPHABLENDENABL, TRUE); 

设置为false,最后一个参数来禁用它。

现在有多种不同类型的混合可供您使用。最简单的是添加剂阿尔法混合设置如下:

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

其他形式可能需要排序正确显示多晶硅。

其还值得注意的是,如果你想看到模型的背部,以及你需要剔除模式设置为none:

pDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); 
0

据我所知,DirectX不会为您计算两个对象之间的确切相交体积,因此不会执行任何体积代数。

你可以做的是假的:寻找阴影投射的解决方案。基本上假定摄像机位置是光源。假设您已确定对象A与对象B相交,则确定哪个对象更接近相机。使用您选择的阴影投射方法,确定更多距离物体上的哪个网格面将成为更近物体的阴影。一旦确定了阴影中的​​网格面,将它们馈送到渲染管线中,但通常会点亮。

+0

你误会我的问题。我已经有三个对象。我只想知道如何使两个对象透明和第三个不透明。 – Himadri 2010-05-08 09:56:47

+0

@Himadri:对不起,我误解了你的问题。原来的问题似乎要求让两个对象的交点可见。我看到你已经更新了这个问题,以表明你已经有了这个交点作为第三个对象。 – Ants 2010-05-08 19:33:43