computer graphics這一門課算是我比較認真的一門課,也是85+認證一族。
課堂一開始,就一直在教畫直線,有人會說,劃直線不就是給個起點與終點,然後呼叫隔壁老王(API),請他幫你油漆就好了嗎?但是如何內插中間的點,而且中間點會有小數,但是pixel位置都是整數,如果給定一個xy線性方程式,要以畫點的api劃出一條線,是相當容易的,但問題是,這個api用了多少次浮點運算,使用了多少個浮點數,這非常的重要,因為FPU比整數運算單元慢很多。學到最後,出社會也不要叫我們寫一個畫直線的api。但是卻很深刻地體認到,程式要跑得快,請注意浮點數的使用,數值程式要跑的正確,請注意浮點數的精確度。畫矩形就跳過去不講。
再還是畫直線,只是畫的是平滑直線,還要交project,沒有修這門課,我永遠搞不懂,大二時我數學系同學問我,為甚麼WINDOWS95的字都糊糊的,大二的我真的答不出來,還敢號稱是資訊系的。原因就是向量字型開啟平滑(ANTI-ALIASING)去鋸齒功能,而且當時解析度很低,例如640X480,邊緣捕的灰階點,看起來就像墨水暈開了,這問題後來怎麼解決的,不用解決啦,面板尺寸變大後,解析度拉高就看不出來了。回到PROJECT,課本只給了一個錐型的微積分方程式,然後老師跟我們說參數把離直線的垂直距離代進去就得到了灰階值。哭了,用C語言怎麼時做一個積分,而且距離直線的距離都是浮點數,也不能用手算後,讓程式查表,老師也沒教。念過數學系的我,這就是我的責任了,答案就留著明天講吧。
沒有留言:
張貼留言