纹理透明度

本文关键字:透明度 纹理 | 更新日期: 2023-09-27 18:29:36

我在纹理透明度方面遇到了一些问题,希望你能帮忙。

详细信息:

  • 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

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

有人能帮我一下吗?

提前感谢:Péter

纹理透明度

别介意,我不认为透明度是问题所在。我认为发生的事情是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混合对象进行排序,然后按从后到前的顺序绘制它们

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

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

因此,设置绘制顺序没有帮助,因为四边形A的一半需要在四边形B之前绘制,而四边形A中的另一半需要在四方形B之后绘制。

如果你把它分成8个四边形,所有四边形都在中间相遇,并根据相机的深度进行排序/绘制,它可能会变得更好。但如果你走这条路,3个四边形可能就足够了。