我正在使用Java編寫一個非常原始的3D圖形引擎,它基於1995年3D遊戲編程的黑色藝術。我已經到了可以將單色多邊形繪製到屏幕上並將相機移動到「場景」。我甚至有一個Z緩衝區,通過將這些像素按Z排序來正確處理半透明物體,只要我一次不會顯示太多半透明像素。我處於想要添加照明的地步。我想保持簡單,環境光看起來很簡單,定向光線也應該相當簡單。但我真的希望點光源能夠移動光源並施加非常原始的陰影(主要是我不希望光線穿過牆壁)。如何構建點光源?
我的問題是,我不知道最好的方法來解決這個問題。我想象一個點光源以規則角度投射光線,如果這些光線與多邊形相交,它將點亮該多邊形並停止向前移動。然而,當我想到一個場景中有多個光源和多個多邊形以及所有這些光線時,我想它會變得非常緩慢。我也不知道如何處理一個多邊形遠離光源的情況,如果它落在兩條光線之間。我會給每個光源一個最大距離,如果我給它足夠的光線,那麼在該距離內應該沒有任何兩個光線相距太遠而不能錯過多邊形的點,但這隻會增加我的問題,要執行的計算。
我給你的問題是:是否有一些技巧指出光源加速或者只是爲了更好地組織它?恐怕我只會得到嵌套for循環的噩夢。我不能使用openGL或Direct3D或任何其他祕籍,因爲我想寫我自己的。
如果你想查看我的結果到目前爲止,這裏是一個YouTube視頻。我已經修復了壞的相機旋轉。 http://www.youtube.com/watch?v=_XYj113Le58&feature=plcp
感謝您的信息。我嘗試使用我發現的點光源和光線三角交點算法設置平面着色器。我的立方體的兩側呈現不同的陰影,但與光線平行的邊比面對光源的面明亮,並且我立方體另一側的面也被點亮。我懷疑我沒有做交叉路口檢測權。我有一些優點,我只有320×240像素,並計劃保持多邊形數量低,但這將是艱難的。我忘記了大部分矩陣代數。 – user137
你將不得不刷新你的矩陣數學/線性代數,這是什麼3D圖形是關於:P我已經更新了我的答案 - 我的答覆不適合評論。 – unohoo
我想做交點測試,以便光線不能穿過牆壁。我不希望移動物體或傢俱等陰影。我想牆和地板將有更少的多邊形進行測試。我認爲使用黑色藝術書的燈光模型與朗伯模型相同,但我必須仔細檢查公式。對於陰影,我將使用gourad陰影,如果不是平面陰影。我可能不得不看另一本書,這本黑皮書使用了很多基於DOS和mode13H的技巧,這些技巧並沒有很好地轉化爲現代計算機。 – user137