這週都去忙我的那個入門級別的3d的東西了.最初的設想是想學習下圖形學,用gdi做個可以支援透視投影,光照,材質,zbuffer的渲染engine.例子就做個有光照,材質的旋轉的立方體.基本上實現完了.因為我的目的是為了學習圖形學,所以**盡量是寫得簡潔,練習下那些演算法,所以基本上沒什麼錯誤處理(呵呵,學習得目的可以這麼幹,要是實際上就不能這麼搞了).在學校裡面沒學過圖形學.剛開始還是挺吃力得說,不過慢慢得就入門了.
先說說3d流水線:
物體(區域性座標系)->世界座標系->相機座標系->透視投影->投影到螢幕,剛開始比較迷惑得是投影面得選擇.不知道應該取z=多少得平面,後來才弄明白了,找了篇**講opengl的那個矩陣是怎麼推導的.覺得寫的不錯,有空翻譯出來和大家共享.
後來就寫了光照方面的**.這裡面有2個conecept光源型別和光的型別的差別.環境光,散射光,鏡面反射光,發射光(物體本身就可以發光),是光的型別. 定向光源(無窮光源),點光源,聚光燈是光源型別.總的來說就是影響物體的顏色,實現的角度簡單來說就是做rgb乘法.
材質就是線性插值了.是挺簡單的概念.實現的時候就是根據紋理座標,每個象素的取位圖裡面的資料,畫到螢幕上.這個非常之慢,要算的東西太多了.不過我想最大的bottleneck應該是 逐象素的來設rgb值.實在是資料量大了點,所以實現出來的結果非常之慢,可能是沒優化的原因.給新增了材質的物體實現光照基本上和不加材質的時候實現一樣.不同的是需要先把物體的每個面看成是白色,然後進行光照處理,然後把處理後的結果和材質上每個象素的rgb做乘法,如果是gouraud模式的話,就還有個插值過程,計算量也是蠻大的.我看我還是要先優化下.不然這些肯定是做不了的.
zbuffer之類的就比較簡單了.大意就是渲染的時候考慮下z的影響.是逐象素的畫家演算法.
後面還有一堆東西等著去看.不過我不打算再去用gdi來實現那些東西了.下一步看看mesa的**吧.還有個人可以討論.
放2張圖作個記錄.
畫了4個立方體.
下面加四種燈光.全部開啟,讓它繞著y軸轉.
仿space的模版基本完成
前幾天發現了 博克藍,不錯的地方,很容易實現部落格的搬家 備份 同步更新。可惜就是模版沒有什麼好看的。我還是比較喜歡space的樣子,所以就突發奇想,在部落格藍上設計乙個space的模版。自認為是不錯的想法,但是一做起來才知道也不容易。因為沒有學過做網頁,沒有css的知識,最後只能找些css的資料來...
MS Namer v0 1 UI基本完成
在我學會mel之後就一直都想寫乙個強大的命名工具,因為我實在是太需要了,雖然如此,但我也不知道自己想要的是乙個什麼樣的工具,ui和功能一時也整理不出來。經過一段時間後 工作 功能已經基本想好,於是開始構思ui,對我來說有乙個友好 美觀的ui是很重要的事情,我也很重視ui的表現功能,經過考慮我覺得ma...
「易語言 飛揚」偵錯程式已基本完成
偵錯程式已基本完成,在windows下測試沒有發現太大的問題,在linux下還需要進一步的測試。目前已經實現的基本功能有 設定斷點,取消斷點,斷點是否有效 單步跟蹤,單步跟蹤進入 執行到游標處,執行到返回 檢視變數值 支援任意型別 修改變數值 僅支援基本型別及其陣列 變數視窗 自動顯示當前所有可見變...