- 相關推薦
用計算機程序制作三維立體畫
摘 要 該文先容了三維立體畫的原理和制作方法,并給出了用c語言編寫的源程序。借助于pbrush.exe,讀者可以自己設計和欣賞各式各樣的三維立體畫。目前,市面上正在流行各式各樣的立體畫,其特點是從外表來看與一般的圖案很相似,但是雙眼緊盯著注視片刻后,一模糊之間眼前便出現了畫中畫——立體像。筆者第一次看到這種畫便被發明者的創意所傾倒。利用眾所皆知的雙眼視差原理,竟能在一張平面紙上制造出如此奇幻。但是立體畫本身除了其發明者的靈感和畫面創作者的別出心裁之外,其原理上并無神秘之處。用計算機程序來實現它,可說是易如反掌。筆者用一個晚上時間,便在微機上用basic語言實現了簡單形體——平面圓餅的立體畫。當然,要使該程序具有完善的功能,進步其制作速度,還是應該用編譯語言(如c語言)來編寫。本文中給出的源程序借助于windows中的.bmp圖形文件,可使大家自己制作任意形態的立體畫。
一、立體畫的原理
看過立體電影的人都知道,當人的雙眼分別接收不同視角拍攝的圖像時便會產生立體感。這是由于人眼長期觀察的習慣造成的。和立體電影原理相同的立體攝影風景照片也很早就已出現。圖1中給出了這種立體照片的示意圖。左、右照片分別是人的雙眼角度上觀察一棱錐體時左右眼看到的圖像(圖2)。左眼看到的是棱錐的頂端向右錯動了一些的圖像,右眼的看到則是棱錐的頂端向左錯動了一些的圖像。假如用一張硬卡片隔開兩張照片(如圖3),@@09a04000.gif;圖1@@
@@09a04001.gif;圖2@@
@@09a04002.gif;圖3雙眼分別看兩張畫,會看到一個立體的棱錐體。這種立體照片的觀察方法在測繪學中也早已采用。
但是,目前的三維立體畫在形式上與這些很不相同。它是怎樣在同一張畫面上呈現立體的呢?首先,分析一下人們是怎樣從這些立體畫中看出“立體形體”的。從前面所說的可以知道,人眼要得到立體感,雙眼必須有視差,即雙眼看到的圖像應該有差異。人們在看立體畫時,都有“模糊”一下的過程。在這過程中,雙眼的視中心發生了錯動(如圖4)。這樣@@09a04003.gif;圖4左眼看到的是畫面的“偏左像”,右眼看到的是畫面的“偏右像”。@@只要“偏左像”和“偏右像”的內容相當于圖1的左、右照片,雙眼就會感到立體形體。那么,能否把圖1的左、右照片分別當做“偏左像”和“偏右像”,簡單重疊來得到立體畫呢?
顯然不行。能夠合成立體畫的“偏左像”和“偏右像”是要滿足一定條件的。
假如圖5中表現的棱錐體的表面上有圖案的話,
@@09a04004.gif;圖5像素a和像素a''應該具有相同的顏色,由于它們是從不同視角觀察的@@同一個實體點。像素b和像素b''、像素c和像素c''的情況與此相同。把兩幅畫分別當作“偏左圖”和“偏右圖”,部分重疊成為同一畫面時,在新的畫面上這種關系仍應該表現為a=a'',b=b'',c=c''(如圖6)。但這時應該留意到,在這張合成
@@09a04005.gif;圖6畫面上,點a''既是“偏右圖”上的點a'',又是“偏左圖”上的點b。而@@一張畫面上相同坐標點的像素只可能是一種顏色,因此,產生了新的像素關系a''=b。另外,點a既是“偏左圖”上的點a,又是“偏右圖”上的點c'',所以,a=c''。以此類推,點b''和點c也有類似的情況。因此出現了新的關系表示式,...''=c=c''=a=a''=b=b''=...。這就構成了立體畫面上像素必須要滿足的條件:“等顏色像素鏈”。立體畫上的所有點都從屬于某一條“等顏色像素鏈”。這就是所有立體畫圖案都呈現出某種程度上的水平周期性的原因。
因此,對于任意立體外形,只要構造出相應的這種“等像素鏈”,并按其規律充填圖案即可得到立體畫。但是正如前面所述,由于這種“等像素鏈”條件的約束,人們固然可以隨意構造出各種形體的立體畫,但其立體形體的表面圖案是不能完全隨人意愿的。
二、制作立體畫的計算機程序
由于人的雙眼的水平性,以上的“等像素鏈”只按水平方向分布,與垂直方向無關。因此,在程序中,各個像素行的處理過程是相互獨立的。制作立體畫的程序主結構圖如圖7。
@@09a04006.gif;圖7 制作立體畫的程序主結構圖在以上結構圖中,關鍵是如何建立“等@@像素鏈”。具體的處理如下。對于立體形體上的每一個點,首先求出該點在“偏左圖”和“偏右圖”上的坐標。以圖1中的棱錐頂點為例,實際上其x坐標是在中心點,但由于雙眼的位置并不在其正上方,頂點在“偏左圖”上向右位移,在“偏右圖”上向左位移,而且其位移值的大小顯然與其高度有關,即該點坐標越高位移值就越大。,b,c等點也都有這些位移。在求出一個點在“偏左圖”和“偏右圖”上的坐標后,再算出在合成圖(如圖6)上的對應坐標
,以建立“等像素”關系,如a=a''。當立體形體的一個水平剖面上的全部點經過以上處理后,合成圖的各條“等像素鏈”關系也就自然形成了。
另外,由于有可能出現高點遮蓋低點的情況,“等像素鏈”的構造應該從低點到高點逐層進行,高點的“等像素”關系將替換低點的“等像素”關系。這也是程序主結構圖中“首先,對于沒有任何形體存在的背景平面構造‘等像素鏈’”的原因。
下面給出了根據以上結構圖用c語言編寫的源程序。程序中,每一個坐標點對應一個結構型數據,它包含“前像素”、“后像素”兩個指針!扒跋袼亍敝羔樦赶蛟撟鴺它c作為“偏右圖”上的一點,在“偏左圖”所對應的點的坐標!昂笙袼亍敝羔樦赶蛟撟鴺它c作為“偏左圖”上的一點,在“偏右圖”所對應的點的坐標。程序中,“立體形體水平剖面的高低坐標數據”、“原始圖案素材”和輸出的“立體畫”的文件格式都是采用了windows3.1 的pbrush產生的bmp圖形文件格式。圖幅大小要求都是640
【用計算機程序制作三維立體畫】相關文章:
淺談應用計算機輔助數學教學03-29
應用計算機輔助數學教學淺談05-17
試論應用計算機輔助數學教學03-29
淺談軍用計算機電磁信息安全與防護03-02
小議用計算機管理會計檔案03-20
談三維制作軟件在園林設計中的應用03-10
論三維制作軟件在園林設計中的應用03-07
多媒體課件制作-《C程序設計》03-08
淺議運用計算機管理會計檔案12-08