大家好囤耳,距離上一篇博文將近一個(gè)月篙顺,時(shí)間過得好快,原本計(jì)劃周更的充择,后面推到半月跟德玫,實(shí)際到現(xiàn)在是月更,每次在準(zhǔn)備寫點(diǎn)什么的時(shí)候椎麦,都會(huì)被一些雜亂的事物打擾宰僧,哎,重度拖延癥观挎、懶癌晚期~
繼上次述說了《計(jì)算機(jī)結(jié)構(gòu)與組成》的課后作業(yè)之后撒桨,這次我來說說《計(jì)算機(jī)圖形學(xué)》的課后作業(yè)吧(ps:上課內(nèi)容都差不多,課后作業(yè)比較有意思)
《計(jì)算機(jī)圖形學(xué)》是我大三上學(xué)期的專業(yè)選修課键兜,課程沒有特別的教材凤类,教學(xué)使用的PPT和課后作業(yè)是MIT大學(xué)的圖形學(xué)內(nèi)容:http://groups.csail.mit.edu/graphics/classes/6.837/F04/calendar.html 這是很老的一個(gè)版本了,看鏈接還是04年的普气,現(xiàn)在MIT已經(jīng)將這門課作為公開課開放給全世界的同學(xué)學(xué)習(xí)谜疤,課程代號(hào)是6.837,給一個(gè)該課程歷年信息:http://stellar.mit.edu/courseguide/course/6/fa17/6.837/index.html 有需要可以自己在里面搜索哦~~~
我們還是繼續(xù)說這門課的課后作業(yè)吧∫目模《計(jì)算機(jī)圖形學(xué)》的課后作業(yè)分幾個(gè)大模塊履肃,或者說是方向。有點(diǎn)線面坐桩、光線投射尺棋、迭代系統(tǒng)、粒子系統(tǒng)等等(其實(shí)是我自己劃分的)绵跷。由于作業(yè)量多膘螟,我就分幾次來細(xì)說,這次我先說說點(diǎn)線面這一塊的內(nèi)容吧(沒有點(diǎn)碾局,作業(yè)中沒涉及到點(diǎn)的內(nèi)容荆残,點(diǎn)本身也沒啥好說的)。
首先來說說曲線和曲面净当。在做這個(gè)作業(yè)之前内斯,原作者已經(jīng)把基礎(chǔ)框架、繪制的方式像啼、點(diǎn)選操作等等都實(shí)現(xiàn)好了俘闯,我們只需要按照作者的設(shè)計(jì)和模板完成曲線曲面的計(jì)算,也就是作者已經(jīng)定好框架和接口忽冻,我們只用實(shí)現(xiàn)曲線的計(jì)算(是不是很方便)
對(duì)于圖形學(xué)中的基本點(diǎn)線面中的點(diǎn)真朗,沒啥好說的,直線好像也沒啥要弄的甚颂,畢竟已經(jīng)讀到大學(xué)蜜猾,這些基本的認(rèn)識(shí)還是有的秀菱。那就先來認(rèn)識(shí)一下在圖形學(xué)中用得比較多的特殊曲線振诬。
如上圖所示,在曲線方面衍菱,先學(xué)習(xí)貝塞爾曲線赶么、比樣條曲線和插值樣條曲線。在上面的三種曲線中脊串,貝塞爾曲線算是工作后見到和用到得比較多曲線辫呻,比如角色動(dòng)畫里的動(dòng)畫曲線、各種插值曲線等等琼锋,用貝塞爾曲線都能得到比較好的控制效果放闺。
在完成基本的曲線繪制計(jì)算后,作為附加作業(yè)缕坎,提出了使用幾何辦法來繪制貝塞爾曲線怖侦,并用動(dòng)圖來展現(xiàn)貝塞爾曲線的計(jì)算和繪制過程,結(jié)果如下圖所示:
嗯,這里提到的貝塞爾的幾何算法匾寝,可以非常好的理解貝塞爾曲線搬葬,同時(shí)在工作后如果忘記了貝塞爾的計(jì)算方程,常常用這種幾何算法來解燃眉之急艳悔,嘿嘿~~~(ps:幾何算法在未加優(yōu)化和變形的時(shí)候急凰,效率不是最高的)
完成曲線的基本計(jì)算后,開始研究曲線間的轉(zhuǎn)換猜年,目前只完成了貝塞爾曲線和比樣條曲線間的互相轉(zhuǎn)換抡锈,如下所示:
這個(gè)是貝塞爾曲線轉(zhuǎn)比樣條曲線,可以看到畫出的圖像完全一樣码倦,但是曲線的控制點(diǎn)卻天差地別企孩。
這是比樣條曲線轉(zhuǎn)貝塞爾曲線,左邊是前面繪制的比樣條曲線袁稽,右邊是該比樣條曲線轉(zhuǎn)換為貝塞爾曲線的結(jié)果勿璃。
在上面完成了4個(gè)控制點(diǎn)的曲線后,我們?cè)賮硗嫱娑嘤嗨膫€(gè)控制點(diǎn)的
ps:多個(gè)控制點(diǎn)有多種不同處理的方式
- 每四個(gè)控制點(diǎn)組成一個(gè)小的曲線推汽,然后連接在一起补疑,這種多控制點(diǎn)曲線其實(shí)是一小段一小段的曲線連接起來的,會(huì)出現(xiàn)比較突兀的連接點(diǎn)歹撒,也就是切線不平滑(這種最簡(jiǎn)單)
- 用所有的控制點(diǎn)一起作用生成一條平滑曲線
第一種比較簡(jiǎn)單莲组,采用的也比較多
圖就看下面的吧。有多余四個(gè)點(diǎn)的曲線暖夭,自然有多余四個(gè)點(diǎn)的曲線間的轉(zhuǎn)化锹杈,如下所示:
左邊是多余4個(gè)點(diǎn)(3n+1) 的貝塞爾曲線,右邊是該曲線轉(zhuǎn)化為比樣條曲線的圖形迈着。
左邊是多點(diǎn)(3n+1) 控制的比樣條曲線竭望,右邊是該曲線轉(zhuǎn)化的貝塞爾曲線
在曲線玩得差不多后,我們就該進(jìn)階了裕菠,該開始玩玩簡(jiǎn)單的面了咬清,就以前的知識(shí),我們知道:點(diǎn)運(yùn)動(dòng)生成線奴潘,線運(yùn)動(dòng)生成面旧烧,所以最先接觸的面則是有上面提到的曲線來生成。曲線中最易控制和使用的是貝塞爾曲線画髓,所以就有了下面的圖形:
- 首先是由6個(gè)點(diǎn)(實(shí)際有7個(gè))組成一個(gè)圓環(huán)掘剪,如下圖左邊所示
- 然后通過這個(gè)圓環(huán)旋轉(zhuǎn)360度,生成一個(gè)圓環(huán)體奈虾,如下圖中間所示
- 最后控制圓環(huán)的采樣精度和旋轉(zhuǎn)360度中的采樣精度夺谁,可以生成不同精度的圓環(huán)體肆汹,如下圖右邊所示
除了圓環(huán)體,我們還可以通過控制曲線旋轉(zhuǎn)生成不同的體狀物體予权,如下所示:
這是一個(gè)通過曲線生成圓桶狀的物體昂勉。
玩了曲線,也玩了由曲線旋轉(zhuǎn)生成的面扫腺,接下來我們來玩玩由多條曲線插值生成的曲面岗照,如下所示:
這里是由4條貝塞爾曲線并列后,生成的貝塞爾曲面:
- 首先取到4條貝塞爾曲線上相同等分的4個(gè)點(diǎn)
- 然后由這4個(gè)點(diǎn)生成一條貝塞爾曲線
- 在生成貝塞爾曲線上等分相同的點(diǎn)記錄下來
- 把得到的點(diǎn)按相同規(guī)則纏繞生成三角形面笆环,然后顯示出來
圖最左邊是相應(yīng)的貝塞爾控制點(diǎn)攒至,后面三張是不同采樣精度得出的貝塞爾曲面
你以為生成了最終的貝塞爾曲面就是這次作業(yè)的終極目標(biāo)么?其實(shí)不是的躁劣,這個(gè)作業(yè)的終極目標(biāo)是由上面完成的功能迫吐,同時(shí)運(yùn)行生成一個(gè)沒有底的茶壺,如下所示:
如果全部都按要求做了账忘,那么這里什么都不用做就可以看到最終的茶壺效果
這里是茶壺的3D查看效果志膀,這個(gè)茶壺是沒有底的,如果有底的話鳖擒,那就是你做錯(cuò)了O(∩_∩)O哈哈~