gpt4 book ai didi

c# - 具有 DiffuseMaterial 的 ModelVisual3D 的透明度

转载 作者:太空狗 更新时间:2023-10-30 00:33:49 25 4
gpt4 key购买 nike

我遇到了一个对我来说似乎是错误的问题。我正在制作一个可视化晶体中原子的应用程序。那个问题是它绘制了一个透明对象并将对象隐藏在后面。

enter image description here

代码如下:

        foreach (var atom in filteredAtoms)
{
var color = new Color();

color.ScR = (float)atom.AluminiumProbability;
//color.G = 50;
color.ScB = (float)atom.MagnesiumProbability;
//setting alpha channel but Opacity doens't work as well
color.ScA = (float)(1.0 - atom.VacancyProbability); //(float)1.0;//
DiffuseMaterial material = new DiffuseMaterial(new SolidColorBrush(color));
//material.Brush.Opacity = 1.0 - atom.VacancyProbability;

// make visuals and add them to
atomBuldier.Add(new Point3D(atom.X * Atom.ToAngstrom, atom.Y * Atom.ToAngstrom, atom.Z * Atom.ToAngstrom), material);
}

当我将 Material 更改为例如EmissiveMaterial 没有“切割”原子。我用谷歌搜索了 this post , 但给出的建议不适用于这种情况。

这是将 2D 笔刷应用于 3D 的错误吗?

完整的源代码可以在这里找到 http://alloysvisualisation.codeplex.com dll 和测试文件 http://alloysvisualisation.codeplex.com/releases测试版链接。

重现步骤:

  1. 午餐应用
  2. 点击打开文件按钮
  3. 打开测试文件 (xyzT2000.chmc)
  4. 点击蒙版按钮
  5. 检查 11(原子系列几乎是透明的)
  6. 点击重绘

最佳答案

对于透明原子,您必须禁用 z-buffer-writing。 我不熟悉 WPF,但您可能可以在 Appearance 或 Material 对象中设置它。

出现此问题的原因如下:

渲染透明原子时,它会将其深度写入 z 缓冲区。随后渲染并应该出现的非透明原子不会写入帧缓冲区,因为它们的 z 值未通过 z 测试,因为 z 值已经在透明原子的 z 缓冲区中。

简而言之,显卡将透明原子视为不透明,并将任何东西隐藏在它后面。

编辑:在研究 WPF 时,它似乎相当高级,没有直接控制 z 缓冲区的行为。

根据 this link ,自发光和镜面反射 Material 不会写入 z 缓冲区,因此在处理透明物体时使用这些是您的解决方案。

关于c# - 具有 DiffuseMaterial 的 ModelVisual3D 的透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com