【问题标题】:Want to make object transparent想让物体透明
【发布时间】:2010-05-08 21:34:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: directx 3d transparent


    【解决方案1】:

    您可以通过以下方式启用 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 );
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 你误解了我的问题。我已经有了三个对象。我只想知道如何使两个对象透明而第三个不透明。
      • @Himadri:对不起,我误解了你的问题。最初的问题似乎要求使两个对象的交集可见。我看到您已更新问题以表明您已经将交集作为第三个对象。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      相关资源
      最近更新 更多