纹理透明度有问题,希望你能帮忙。
详细说明:
纹理源是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
编辑:关于问题的更详细信息是:问题在于透明纹理,模拟火焰效果。火是来自几个具有这些透明纹理的矩形。如果我从一个角度看火,我应该通过透明纹理看到另一个火焰效果的矩形,这也是透明的。问题是而不是这个,我看到模型背后的地板纹理。
有人可以帮我一点吗?
提前致谢: 彼得
答案 0 :(得分:1)
没关系,我认为透明度不是问题。我认为最新发生的事情是Z-Buffer中的第一件事就是吸引而不是其他任何东西。
http://blogs.msdn.com/b/shawnhar/archive/2009/02/18/depth-sorting-alpha-blended-objects.aspx
最重要的部分是指定如何最好地订购场景和操纵DepthBuffer。
答案 1 :(得分:0)
这既不是透明度问题,也不是您可以解决的订购问题。
布局的性质使所有4个四边形相互重叠,因此每个四边形需要同时位于另一个四边形的前面和后面。
因此设置绘制顺序无济于事,因为需要在四边形B之前绘制一半四边形A,而在四边形B之后需要绘制四边形A的另一半。
如果将它分成8个四边形,在中间相遇并按照相机的深度排序/绘制,可能会更好一些。但是如果你走这条路线,3个四边形就足够了。