2012-05-16 155 views
1

我在C#,XNA中製作了一個minecraft-kinda引擎。它提供了很高的fps,並加載大塊w/o fps瀑布,但是當涉及到全局光線和陰影時 - 我遇到了問題。平滑頂點之間的顏色

基本上 - 在塊的模型創建循環

for (i = 0; i < 16; i++) 
{ 
    for(int j = 0; j < chunk_height; j++) 
    { 
     for(int k = 0; k < 16; k++) 
     { 
      // check if block (and 4 blocks around 
      // a current one (i, j, k), (i + 1, j, k), 
      // (i - 1, j, k), (i, j, k + 1), (i, j, k -1)) 
      // are covered and put shadows to block face's vertex colors. 
     } 
    } 
} 

結果是老的Minecraft風格的影子:

(像以前那樣截圖與sync上取得同樣好的服務表現,沒有它的fps是〜350

但我試圖實現minec筏的陰影,生物羣落顏色和光平滑 - >

我使用三角形列表,因爲它不可能使用三角形帶這樣的東西。 但在這種情況下,在任何立方體面之間頂點顏色不平滑。

所以問題是平滑這些頂點。顏色看起來像我的世界之一。

我做了一個簡單的算法,但它加載CPU太硬(vertices.Count^2 - sized loop)所以當你旅行的世界和新加載的塊的陰影計算,PC滯後1-2秒,每一次,而在MC有沒有這樣的速度變慢。

(我需要平滑算法中以實時和onrun因爲主要的目標是打敗我的世界的表現(在我的世界目前的最低/中圖形的結果是實現(〜300個FPS與我的世界的70))

組塊的類(主要的問題),輔助類(其它的東西,在項目中使用),Block類(塊型基(用於創建和註冊塊類型),塊的模式發生器):

http://pastebin.com/GB1QqtdQ

PS對不起,如果它不好,我的英語不是我的主要語言。

+0

希望你不介意我的編輯。更清晰的格式將幫助您更好地關注您的問題。 –

+0

謝謝你,我希望如此 – user1399159

回答

0

您似乎根本不共享頂點。如果你要構建共享頂點的地板,你會得到正確的結果。請記住,僅僅因爲它是一個三角形列表而不是三角形條帶,並不意味着索引緩衝區不能引用兩個或更多三角形的同一個頂點。

+0

如果通過「分享」你的意思 - 使用8個頂點而不是24個立方體/共享頂點之間的立方體附近,然後我不能。 1)我不會在着色器中計算法線 - 它的速度慢且太困難2)我需要紋理座標來爲每個塊的每個人臉單獨設置(我使用具有不同紋理貼圖的單個紋理文件用於多紋理貼圖('貼圖集') )所以通過以這種方式共享頂點,我只能得到僞像和「扭曲」而不是塊紋理的彩色失真。 *希望我瞭解你的權利:/ – user1399159

+0

你的目標是什麼配置文件?它有權訪問GS嗎?如果你這樣做,你的大部分困難可能會消失。 – Ani

+0

XNA Profile? HiDef - >我不需要Xbox/Windows手機,我只需要一個乾淨的PC版本的XNA遊戲,但具有良好的性能和圖形。性能和圖形的實現,唯一的問題就是該函數(SmoothVertices的顏色) - 它減慢了一切,並限制了我預先計算 - >預加載整個世界(如果它的大 - > gona需要很多RAM(VRAM )。少於Minecraft,但mc沒有預先計算 - 他們的世界是無限的大小)。 – user1399159