纹理透明度

时间:2012-04-01 12:00:52

标签: c# xna textures xna-4.0

纹理透明度有问题,希望你能帮忙。

详细说明:

  • 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

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

有人可以帮我一点吗?

提前致谢: 彼得

2 个答案:

答案 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混合对象进行排序,然后按照从后到前的顺序绘制它们

答案 1 :(得分:0)

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

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

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

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