2012-04-01 176 views
1

我有纹理透明度的问题,我希望你能帮助。纹理透明

详情:

  • 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

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

所以有人可以帮我一下吗?

在此先感谢: 彼得

+1

你有没有考虑一个约束广告牌,而不是4个四边形。它会用更少的顶点和代码来解决这个问题。 – 2012-04-01 23:45:13

+0

+1确实很不错,但我不想要它。 – 2012-04-03 15:40:37

回答

1

没关系,我不认为透明度是问题。我认为发生的事情是Z缓冲区中的第一件事情正在被吸引,而且没有其他任何东西在背后。

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

最进口的那部分是他指定了如何最好地定购场景和操作深度缓存。

  1. 集DepthBufferEnable和DepthBufferWriteEnable真
  2. 绘制所有不透明几何
  3. 离开DepthBufferEnable设置为true,但是从相机的距离改变DepthBufferWriteEnable假
  4. 排序alpha混合的对象,然后在绘制它们从后到前的订单
+0

没有为我工作,但谢谢。 (如果颜色是黑色的话,也会除以0)。我甚至试图让它变成新颜色(szín.R,szín.G,szín.B,0.5f),使其具有半透明性,但问题仍然存在:您会看到通过透明度来代替另一个火灾效果(纹理)。 – 2012-04-01 19:38:26

+1

我重新看了视频,不认为透明度是问题。重写了帖子以反映我的意见。 – ClassicThunder 2012-04-01 20:13:56

+0

非常感谢你,你帮了很多。我能够解决这个问题。 – 2012-04-03 18:16:59

0

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

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

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

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

+0

我很幸运,因为上面的想法就像一个魅力,所以我不需要改变模型。我所做的只是收集我用透明度绘制的绘图数据,用不透明绘制其余部分,然后在完成所有这些绘制数据之后,我绘制透明的东西与alpha;与dephtbufferenable和writeenable的东西。 编辑:到目前为止不需要排序的东西,可能只是运气,但并不需要。 – 2012-04-03 20:27:20