3D 繪圖速成小筆記

我希望自己在最短的時間之內, 就把 3D 基本觀念搞懂. 最好只花一個 page 就可以複習. 以下就是我的筆記.

3D 繪圖方式有三種, 第一種是用線的觀念. 可以想像一個視線從投射面回溯到光源, 這稱之為 Ray-tracing. 第二種方式是把圖的表面 (surface) 分解成小塊 (patch). 而每個 patch 都有自己的光照圖 (light map), 並且輻射周圍的 patch. 這稱之為 Radiosity, 聽起來有 iteration 的感覺.

第三種方法,  稱之為 Rasterizing (光柵化), 也就是唯一適用於硬體加速的演算法. 簡單地說, 就是先得到頂點 (vertex), 然後把點連成網眼 (mesh), 其中的基本圖形是點, 線, 與三角形, 三者合稱為 primitive.

假設我們要畫的東西是一個剛體, 不會隨便就變得軟趴趴的, 那麼每個 vertex 都可以有一個相對座標值. 要把這個 object coordinate 轉到整張圖上的座標位置 world coordinate, 這就是第一個轉換. 轉到 world coordinate 還是不夠的, 因為觀察者視角的關係, 這個位體還要轉到 eye coordinate. 就好像一個魔術方塊, 不可能讓我們同時看到六個面, 座標位置當然與觀察者的角度有關.

轉完之後, 開始打光, 包括 R, G, B, alpha 四個值決定紅, 綠, 藍和透明的強度.

畫好之後, 剛才的魔術方塊又出現了. 被擋到的東西不用畫, 也不能畫. 所以要再次轉到裁切座標 (clip coordinate). 在最上層的東西, 才會畫到螢幕上 screen coordinate.

以上可以得知哪些 vertex 位於螢幕之內或是之外. 凡是落在螢幕之外的 vertex, 我們只需要畫到螢幕邊緣就好. 但任意多邊形並不是 primitive, 所以那些形狀不齊的四邊形會被分割成兩個三角形.

現在有了一堆轉換過的頂點, 接著就要把頂點所包圍的畫素 (pixel) 都找出來. 這個過程就是光柵化 (Rasterize). 還在 vertex 階段的處理稱為 front-end, pixel 等級的處理稱為 back-end.

在 pixel 的操作包括下面三者: texture (紋理), blending (混色), filtering (濾鏡), 總之就要給每個 pixel 最合理的顏色. 原先在 vertex 階段所配置的特性如何用在 pixel 上呢? 大致就是內插法. 所以原先幫每個 vertex 打光的工程, 就不需要詳細到 pixel 等級上那麼累! 真是聰明哪!

下一個階段就是要把畫好的圖貼進 frame buffer 了. 比方說要畫個眼睛在臉上, 眼睛總不能大過臉, 又不是海綿寶寶的蟹老闆. 因此要在可以畫眼睛的範圍以外塗上框框, 這個框就是模板 (stencil). 其次當然不脫後景不蓋前景, 需要更新的區域才更新等基本限制, 在真正畫出去之前, 要先做這類的測試. 例如 scissor test, alpha test, depth and stencil test 等等.

測完之後可能還有一點事情要做, 比方說 alpha belnding, 千辛萬苦之後, 一個點好不容易才可以進到 frame buffer.

講完硬體之後, 再講一點點軟體. 繪圖的 API 包括 OpenGL, 這是 ARB 推的. 還有 Direct3D, 這是 Microsoft 推的.

OpenGL 的指令分為兩種, 一種是給定 vertex 與顏色等等, 以產生圖像. 另外一種是設定對上述資料的操作. 甚至是先做一些 transform 以取得新 vertex 的座標.  基本就是只做 rendering.  

[reference]

http://www.ategpu.com/2009/05/29/interactivecomputergraphics.html

說 reference 也太牽強了, 我根本是濃縮再製版.

http://zh.wikipedia.org/wiki/OpenGL

因為不太懂又沒有時間, 所以我花 2 個小時, 寫了這個快速學習備忘錄. 謬誤之處, 請多多見諒. 等我有所成長, 再來修正這裡的不足.

 

手機電池的壽命

我的前任手機 CHT9100 似乎很耗電, 或者說是: 給它買了五六顆電池也都擋不了多久. 不論是正廠或是副廠的電池都是如此.

雖然說 HTC 給的這顆電池本來就容量偏小 (1500 mAh) , 不過…完全是電池的錯嗎? 這兩天我 survey 到一顆高容量的 9100 電池, 號稱有 2400 mAh 的能耐. 正在我覺得這顆厚電池是個很棒的選擇的同時, 我也赫然發現它的規格上有一行字說, 可以充電 300~500 次. 那.. 300~500 次究竟是多還是少呢?

雖然我已經知道鎳氫電池的壽命決定於放電是否完全? 有沒有迴避記憶效應? 但是上網看了高人的評論, 才領會到充電次數才是電池的壽命正確計算方式, 而非 6 個月或是 2 年這樣以時間為單位. 正常來說, 充電次數應該在 500~800 次才合理, 每次充電就完成一個化學作用的循環: 1000mAh 的電池以 1000mA 從沒電充電到飽. 如果以此為標準, 300~500 次就嫌少了點, 難怪業者要自行揭露, 以免產生購物糾紛.

同樣的道理, 如果我的 Notebook 都帶著充電器跑來跑去的話, 充電次數就增加了. 即使是只充到一小部分, 電池壽命應該會變短嗎? 上網再查了一下, 讓電池處於過高或過低的電壓不好, 所以有業者說, 用到一半就充電比用到光再充電好.

http://vnids0.pixnet.net/blog/trackback/4bed2258f2/10117558

http://www.gastech.com.tw/tw/Li-Battery.htm

 

公共選擇學派的啟示

在凱因斯的理論中, 他認為經濟人是自利的. 而政府是大公無私的. 政府適時地提出各種 "宏觀調控" 來輔助市場的話, 那麼經濟運作就得以完整. 這種類似貴族與平民合作的論調, 在當時頗受歡迎.

布坎南對於經濟人的自私和政治人的無私感到矛盾, 畢竟大家都是人, 於是他創造了公共選擇學派. 在這個新的理論中, 政治人依舊是自私的, 他們透過開支票換選票, 拿到選票再換鈔票. 於是大家在政治上選擇可以給民眾最大好處的人, 而政治人也可以從中撈到好處. 這樣大家就扯平了. 民眾有意識地選擇爛蘋果, 而不是無意識地被騙選票, 這就是公共選擇的核心理論.

其實不只是在政治上如此, 在公司也是一樣. 基本上, 每個人都做了選擇, 包括主管選擇屬下, 或是屬下選擇主管. 選擇對方做自己的搭檔, 就意味著權力的交換.

屬下把 "我該做什麼?" 的權力放棄, 換取主管 "指點明路: 由此去 – 升官發財" 的服務. 如果主管不能提供這種交換, 底下的人就會跑掉. 有時候主管可以提供的服務太少, 例如: 怎麼樣都不能滿足屬下的財務需求, 那麼屬下就會選擇其他公司或主管. 反之, 若是屬下不能提供主管 "解決問題" 等等的服務, 主管就會想要換個屬下. 或許這應該稱之為 "私私選擇理論", 哈! 

政治圈最可貴的是聖人, 公司人最可貴的是台灣牛, 任勞任怨, 傻傻地往前衝, 從不顧慮可以換回甚麼! 可惜這種人終究會覺得不好玩, 無可救藥的樂天派大概都可以拿到諾貝爾獎, 像是德蕾莎修女, maybe 哪一天慈濟也會得獎, 畢竟這種人相當罕見.

寫完這篇, 還庫存著的時候, 恰好在杜拉拉的第 27 回裡面看到類似的說法, 雖然它說得比較功利一點, 其實是同樣的東西. 這證明我的思路並不孤單呢!

這年頭, 不光是做老闆的會問手下: "你向我要什麼, 要看你能給公司什麼?"; 做下屬的也會看: "我就到了什麼老闆能給我什麼?" .  威望和權力是相結合的, 沒有 power 哪裡去找 admiration (意指 "無權威則無德望").

除非部屬樂於接受做個 "小資" 或是 "中產階級", 若是他們想做 "高產階級" 或是 "富人", 那麼不賺錢的公司大概都拿他們沒辦法. 據此而言, 用女生比用男生好. 因為社會對女性的期待較低, 她們也比較不會過度膨脹.

現在一般 IT公司都可以接受晉用女工程師了, 主管的想法可以再先進一點. 我覺得公司應該多用殘障人士, 只要做 audio 的不聾, 做 video 的不瞎, 似乎也不影響工作品質. 若是他們能愛惜工作, 堅守崗位, 主管就算是以小博大了.

話說回來, 普通人還可以選擇公司, 主管, 部屬. 若講到政治舞台, 每個國家都只有一個啊! 政治聖人覺得不好玩的時候, 顯然比公司人要更慘吶…

 

Adobe Flash vs. Nokia QT

手機的功能日益強大, 愈來愈像是一台攜帶式的小電腦, 雖然它的螢幕仍舊相當地迷你, 最多不過 4 吋多一點, 但是顧客對於繪圖能力的需求顯然與日俱增, 現在 VGA 的解析度已經不能算是高標準了.

如果要在手機上玩遊戲, 至少得支援 Java. 由於 Sun 公司自己不生產手機, 因此 Java 遊戲雖多, 還是要依賴底層軟硬體的支援. 若是想要在手機上種菜偷菜, 就得靠 flash 才行. 畢竟 flash 出道已久, 以前看的賤兔動畫就是用 flash 所畫的. 至於網路 flash 遊戲更是滿坑滿谷, 我女兒也花了不少時間在上面.

由於 Android 本身就支持 Flash Lite 的插件, 所以基於 Android 作業系統的手機就具備了更多的網路瀏覽優勢, 像是 HTC Hero.

Flash 的攜帶版本 (Flash Lite) 和 PC 版本的對照如下:

http://www.adobe.com/tw/products/flashlite/version/

Flash Lite 1.1 支持 Flash 4 的遊戲與動畫

Flash Lite 2.1 支持 Flash 7 或之前的遊戲,

Flash Lite 3  支持 Flash 8 或之前的遊戲、與 Youtube. 

如果看到 F9 字樣但什麼都撥不出來, 那是正常的. 因為 Flash Lite 不支援 Flash 9.

另一方面, Nokia 基於 Symbian 的 OS, 再加上他們在 2008 年 1 月所買的 QT, 同樣可以提供高階的應用軟體. 例如 Google Earth、Last.fm、與 Skype 等等. 在瀏覽器方面, 則是支援 Opera.

Opera 雖然網路瀏覽功能一把罩, 遇到 Youtube 這種 flash 軟體, 還是要加上 Flash Lite 的插件. 如果插件被拔掉, 只剩陽春版的 Opera 就遜色多了.

整理 Symbian 與 Android 不同的地方是, Android 本身就支援 Flash Lite 插件, 而 Symbian 是靠 Opera mobile 來外加此一插件. 如果使用 QT 的 Symbian 都要擁抱 flash, 那麼 flash 的前景看起來真是相當地不錯.

[ref]

http://www.javaeye.com/topic/250275

http://news.networkmagazine.com.tw/software-application/2009/03/06/11159/

 

日文形容詞文法整理

 日文的形容詞分為 い型 和 な型 兩種, 主要的特色在於時態的變化, 這是中文或是英文所沒有的. 以前胖, 現在瘦, 用中英文都相當單純. 但是日文就必須改變形容詞的語尾來表示時態.

い型和な型的形容詞有些不同, 如果是い型, 唸法是訓讀 (日式的, 用中文去猜也猜不到那種). 比方說大小, 顏色有關的形容詞都是い型. 我把它想像成自古就存在的說法.  な型比較混亂, 唸法包括訓讀, 音讀 (比較像中文的那種), 以及外來語.

い型的過去式與否定變化如下表, X 表示語幹.

X + い →過去式→ X +  かっだ

 否定

  過去否定
 X + くない  →過去式→  X+ くな + かっだ

[note] 促音的輸入用 ltu.

例子:

大きい → 大きくなかっだ = 以前不大.

升級到敬體的方法:

(1) 後面再加 です, 例如 大きい → 大きいです 

(2) 用 ありません, 例如 大きない → 大きありません 

 

大きい+です  →過去式→ 大き+ かっだ+です

 否定

  過去否定
 大き+ くない+です  →過去式→ 大き+ くな+かっだ+です

[特例] 良い(いい) 以前有提過 ,因為剛好有兩個い, 後面那個 い配合い型公式, 但前一個い也要改成よ. 綜藝節目 "天才衝衝衝" 裡面, 常常有人唱這首, "愛人呦依呦依呦, よいよいよ,…", 還滿好記的.

 いい →過去式→ かっだ

 否定

  過去否定
 くない  →過去式→ くなかっだ

 な 型形容詞的時態據說和名詞一樣. 但是看了網路上的參考資料, 似乎沒有打包票. 總之, 它和い型一樣, 要先去な這個語尾再變化.

[常體]

 X (だ) →過去式→ X + だった

 否定

  過去否定

 X +  じゃない

 →過去式→

X + じゃなかった

[敬體]

X+です →過去式→ X+でした
否定   過去否定

X + ではありません

X + じゃないです

→過去式→

X + ではありませんでした

X + じゃなかった

所以下面四組可以排列組合使用.

では ありません
では ない
じゃ ありません
じゃ ない

下面四組也可以排列組合使用.

では ありませんでした
では なかった
じゃ ありませんでした
じゃ なかった

希望沒記錯, 好難的日文啊!

重要參考資料: http://el.mdu.edu.tw/datacos//09422012021A/activity22.pdf