2012-04-01 143 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