我正在使用directx。我在窗口上显示两个对象。它们相互交叉。我找到了相交的物体。想使物体透明
我的问题是-
我想要两个原始物体是透明的,并且产生的相交部分是不透明的,这样可以清楚地看到相交的部分。
我发现一些与透明度有关的问题,但它们与窗口的透明度有关。但我希望对象是透明的。
我正在使用directx。我在窗口上显示两个对象。它们相互交叉。我找到了相交的物体。想使物体透明
我的问题是-
我想要两个原始物体是透明的,并且产生的相交部分是不透明的,这样可以清楚地看到相交的部分。
我发现一些与透明度有关的问题,但它们与窗口的透明度有关。但我希望对象是透明的。
您可以通过这样做使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);
据我所知,DirectX不会为您计算两个对象之间的确切相交体积,因此不会执行任何体积代数。
你可以做的是假的:寻找阴影投射的解决方案。基本上假定摄像机位置是光源。假设您已确定对象A与对象B相交,则确定哪个对象更接近相机。使用您选择的阴影投射方法,确定更多距离物体上的哪个网格面将成为更近物体的阴影。一旦确定了阴影中的网格面,将它们馈送到渲染管线中,但通常会点亮。
你误会我的问题。我已经有三个对象。我只想知道如何使两个对象透明和第三个不透明。 – Himadri 2010-05-08 09:56:47
@Himadri:对不起,我误解了你的问题。原来的问题似乎要求让两个对象的交点可见。我看到你已经更新了这个问题,以表明你已经有了这个交点作为第三个对象。 – Ants 2010-05-08 19:33:43