首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelVisual3D与DiffuseMaterial的透明性

ModelVisual3D与DiffuseMaterial的透明性
EN

Stack Overflow用户
提问于 2012-04-13 23:44:33
回答 1查看 4.3K关注 0票数 5

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

以下是代码:

代码语言:javascript
复制
        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);
        }

当我把材料换成EmissiveMaterial时,没有“切割”原子。我搜索了这个职位,但是给出的建议不适用于这种情况。

这是一个应用于3D的2D刷子的bug吗?

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

复制步骤:

  1. 午餐应用
  2. 单击“打开文件”按钮
  3. 打开测试文件(xyzT2000.chmc)
  4. 单击掩蔽按钮
  5. 检查11 (原子序列几乎是透明的)
  6. 踢重画
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-14 00:16:17

对于透明原子,必须禁用z-缓冲区写入。我不熟悉WPF,但是您可能可以在外观或物质对象中设置它。

出现此问题的原因如下:

当一个透明原子呈现时,它会将其深度写入z-缓冲区.随后呈现并应该出现的非透明原子不会被写入帧缓冲区,因为它们的z值不能通过z测试,因为透明原子的z-缓冲区中已经有z-值。

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

编辑:在查看WPF时,它看起来相当高,没有直接控制z缓冲区的行为。

根据此链接的说法,发射和反射的材料不会写入z-缓冲区,所以在使用透明对象时使用这些是解决方案。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10149701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档