【发布时间】:2010-05-08 21:34:19
【问题描述】:
我正在使用 directx。我在我的窗口上显示两个对象。它们相互交叉。我找到了相交的对象。
我的问题是-
我希望两个原始对象是透明的,而生成的相交部分是不透明的,这样可以清楚地看到相交的部分。
我发现了一些与透明度有关的问题,但它们与窗口的透明度有关。但我希望对象是透明的。
【问题讨论】:
标签: directx 3d transparent
我正在使用 directx。我在我的窗口上显示两个对象。它们相互交叉。我找到了相交的对象。
我的问题是-
我希望两个原始对象是透明的,而生成的相交部分是不透明的,这样可以清楚地看到相交的部分。
我发现了一些与透明度有关的问题,但它们与窗口的透明度有关。但我希望对象是透明的。
【问题讨论】:
标签: directx 3d transparent
您可以通过以下方式启用 Alpha 混合:
pDevice->SetRenderState( D3DRS_ALPHABLENDENABL, TRUE );
将最终参数设置为 FALSE 以禁用它。
现在有多种不同类型的混合可供您使用。最简单的是additive alpha blending set如下:
pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_ONE );
pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_ONE );
其他形式可能需要对多边形进行排序才能正确显示。
另外值得注意的是,如果你想同时看到模型的背面,你需要将剔除模式设置为无:
pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
【讨论】:
据我所知,DirectX 不会为您执行任何体积代数来计算两个对象之间的精确相交体积。
你能做的就是假装它:寻找阴影投射的解决方案。基本上假设相机位置是光源。假设您已经确定对象 A 与对象 B 相交,然后确定哪个对象更靠近相机。使用您选择的阴影投射方法,确定较远对象上的哪些网格面将成为较近对象的阴影。一旦确定了哪些网格面在阴影中,将它们输入到渲染管道中,但通常是亮的。
【讨论】: