【问题标题】:texture transparency纹理透明度
【发布时间】:2013-01-21 23:25:05
【问题描述】:

我在纹理透明度方面遇到了一些问题,希望您能提供帮助。

详情:

  • XNA 4.0
  • 纹理来源是BMP,我用代码透明的:

    public void Feketealapú(string Azonosító)
    {
      //textúra megállapítása
      Texture2D Textúra = Textúrák[TextúraSzáma(Azonosító)];
    
      //adatok lekérése
      Color[] buffer = new Color[Textúra.Width * Textúra.Height];
      Textúra.GetData<Color>(buffer);
    
      //adatok módosítása
      for (int i = 0; i < buffer.Length; i++)
      {
        Color szín = buffer[i];
        szín.A = ((byte)((szín.R + szín.B + szín.G) / 3));
        buffer[i] = szín;
      }
    
      //adatok visszaírása
      Textúra.SetData<Color>(buffer);
    }
    
  • 在开始绘制 3d 内容之前,我会使用以下内容:

    public void Rajzolj()
    {
      GStatic.Játék.GrafikaiCsatorna.BlendState = BlendState.AlphaBlend;
      GStatic.Játék.GrafikaiCsatorna.DepthStencilState = DepthStencilState.Default;
      GStatic.Játék.GrafikaiCsatorna.RasterizerState = RasterizerState.CullCounterClockwise;
      GStatic.Játék.GrafikaiCsatorna.SamplerStates[0] = SamplerState.LinearWrap;
    

    ..等等

  • 如果我使用 BlendState.Opaque,我不会得到透明纹理。

  • 我遇到了以下问题:http://youtu.be/ZiPzyk7AWu8

  • 编辑:关于问题的更多细节是:问题在于透明纹理,它模拟了火焰效果。火焰来自几个具有这些透明纹理的矩形。如果我从一个角度看火焰,我应该通过透明纹理看到另一个火焰效果的矩形,什么也是透明的。问题是,我看到的是模型背后的地板纹理

那么有人可以帮帮我吗?

提前致谢: 彼得

【问题讨论】:

  • 您是否考虑过约束广告牌而不是 4 个四边形。它将用更少的顶点和代码解决这个问题。
  • +1 确实是个好主意,但我还不想要。

标签: c# xna textures xna-4.0


【解决方案1】:

没关系,我认为透明度不是问题。我认为发生的事情是 Z-Buffer 中的第一件事是被绘制,而在它后面没有其他任何东西。

http://blogs.msdn.com/b/shawnhar/archive/2009/02/18/depth-sorting-alpha-blended-objects.aspx

最重要的部分是他指定如何最好地对场景进行排序和操作 DepthBuffer。

  1. 将 DepthBufferEnable 和 DepthBufferWriteEnable 设置为 true
  2. 绘制所有不透明的几何体
  3. 将 DepthBufferEnable 设置为 true,但将 DepthBufferWriteEnable 更改为 false
  4. 按与相机的距离对 Alpha 混合对象进行排序,然后按从后到前的顺序绘制它们

【讨论】:

  • 对我不起作用,但谢谢。 (如果颜色是黑色,也会除以零。)我什至尝试将它设置为 new Color(szín.R, szín.G, szín.B, 0.5f) 半透明,但问题仍然存在:你看地板而不是通过透明度的另一种火焰效果(纹理)。
  • 我重新观看了视频,认为透明度不是问题。重写帖子以反映我改变的意见。
  • 非常感谢,您帮了大忙。我能够修复这些东西。
【解决方案2】:

这既不是透明度问题,也不是您可以解决的排序问题。

布局的性质是所有 4 个四边形相互重叠,因此每个四边形需要同时位于另一个四边形的前面和后面。

因此设置绘制顺序无济于事,因为四边形 A 的一半需要在四边形 B 之前绘制,而四边形 A 的另一半需要在四边形 B 之后绘制。

如果你将它分成 8 个四边形,它们都在中间相交并按相机的深度排序/绘制,它可能会好一些。但是如果你走这条路,3个四边形可能就足够了。

【讨论】:

  • 我很幸运,因为上面的想法就像一个魅力,所以我不需要改变模型。我所做的只是收集那些我要用透明度制作的绘制数据,用不透明绘制其余的,然后在完成所有这些之后,我用 alpha 绘制透明的东西;带有 dephtbufferenable 和 writeenable 的东西。编辑:到目前为止不需要对事物进行排序,可能只是运气,但不需要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2015-03-20
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多