纹理透明度
本文关键字:透明度 纹理 | 更新日期: 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的位置。
- 将DepthBufferEnable和DepthBufferWriteEnable设置为true
- 绘制所有不透明几何体
- 保持DepthBufferEnable设置为true,但将DepthBufferWriteEnable更改为false
- 按与摄影机的距离对alpha混合对象进行排序,然后按从后到前的顺序绘制它们
这既不是透明度问题,也不是您可以解决的排序问题。
布局的性质是所有4个四边形相互重叠,因此每个四边形都需要同时位于另一个四边形的前面和后面。
因此,设置绘制顺序没有帮助,因为四边形A的一半需要在四边形B之前绘制,而四边形A中的另一半需要在四方形B之后绘制。
如果你把它分成8个四边形,所有四边形都在中间相遇,并根据相机的深度进行排序/绘制,它可能会变得更好。但如果你走这条路,3个四边形可能就足够了。