簡體   English   中英

在XNA中照明2D瓷磚貼圖

[英]Lighting a 2D Tile Map in XNA

對於那些對計算機圖形學非常了解XNA和色彩理論的人,我有一個簡短的問題。 我正在制作一個拼貼游戲(有點像Terraria),我想知道如何在場景中應用平鋪照明。 彩色照明是這款游戲的必需品,現在我有了4個2D字節數組,存儲了整體光線和3種不同的色量,從而達到了這個目的。 繪制圖塊時,它會采用特定圖塊的紋理,但是我將如何基於3種顏色值和整體光照在同一圖塊上應用顏色?

現在,這是我的顏色生成功能:

public Color GetColorAt(int x, int y)
{
    byte r = _rMap[x, y]; //Red light
    byte g = _gMap[x, y]; //Green light
    byte b = _bMap[x, y]; //Blue light
    byte mul = _lightMap[x, y]; ///Overall light

    return new Color(r * mul, g * mul, b * mul, 1);
}

作為色彩理論的新手,我完全不知道是否要以正確的方式進行操作。 我的照明系統使用蜂窩算法,減少並擴展到所有相鄰的磚塊。 如果它降低了每個圖塊的顏色值,那么我是否甚至需要整體光值?

此外,當涉及將瓦片紋理和光混合以獲得結果時,我是否要使用加法,乘法或其他計算?

TL; DR:1.考慮到每個瓦片之間的光線減少,上述代碼塊是否起作用? 2.如何結合光和紋理以獲得在光的顏色下看起來像它的紋理?

感謝您的幫助,我沒有色彩組合的經驗。

您可能不需要總體/ mul值-R,G和B足以表示淺色和強度。

您使用的是“字節”,但數學上使用范圍從0.0到1.0的“浮點”值可能會更容易。

在浮點表示中, R=1, G=1, B=1是白色, R=0.5, G=0.5, B=0.5是中等灰色, R=0, G=0, B=0是黑色等。然后,您可以直接直接乘以顏色,而不必在0..255字節范圍之間來回轉換。

繪制圖塊時,可以使用SpriteBatch的color參數-基本上將其設置為淺色,並且在繪制圖塊時應自動進行顏色乘法。 如果您要使照明單元比瓷磚小(例如Terraria),則可能需要編寫自定義着色器,該着色器涉及更多-但有助於了解您是否打算繼續學習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM