《二維圖向三維浮雕圖轉(zhuǎn)換的研究》由會(huì)員分享,可在線閱讀,更多相關(guān)《二維圖向三維浮雕圖轉(zhuǎn)換的研究(2頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、
第 1 期
2003 年 1 月
CHINA MEASUREMENT TECHNOLOGY
中國(guó)測(cè)試技術(shù)
No11
J an1 ,2003
二維圖向三維浮雕圖轉(zhuǎn)換的研究
馬
毅
盧延詩(shī)
(電子科技大學(xué)機(jī)械電子工程學(xué)院 ,成都 610054)
摘要 浮雕藝術(shù)品具有較強(qiáng)的藝術(shù)表現(xiàn)力 ,因此受到了越來(lái)越
多的人們的喜愛 ,也正因?yàn)槿绱?,人們對(duì)浮雕藝術(shù)品的需求也 日益增加 。為了滿足人們對(duì)浮雕藝術(shù)品的需求的增長(zhǎng) ,現(xiàn)在大 多采用了 CAD/ CAM 技術(shù)來(lái)完成浮雕藝術(shù)品的設(shè)計(jì)和制造 。其 中大部分是直接在三維空間中進(jìn)行設(shè)計(jì)和制造。但是 ,我們往 往面對(duì)的是
2、一副二維圖 ,如一副照片等。因此本文將討論如何 利用計(jì)算機(jī)輔助設(shè)計(jì)手段來(lái)實(shí)現(xiàn)從二維圖到三維浮雕圖的轉(zhuǎn) 換。
關(guān)鍵詞 布爾運(yùn)算 掃描法 四叉樹 細(xì)分
對(duì)于簡(jiǎn)單圖形來(lái)說(shuō) ,只要我們能確定平面圖形中
各個(gè)形體所表達(dá)的立體圖形的具體形態(tài) ,那么我們通 過(guò)簡(jiǎn)單的轉(zhuǎn)換 ———定義不同圖形的高度 ,以及拔高時(shí) 的拔模斜度等就可以將二維圖轉(zhuǎn)換成三維浮雕圖 。例 如圖 1 (左) 所示的四個(gè)圖形 ,我們采用下面的步驟便 可將其轉(zhuǎn)換成圖 1 ( 右) 所示的立體浮雕圖形了 : 先把 外圍矩形框沿 Z 軸正向拔高一個(gè)高度形成一個(gè)長(zhǎng)方體 基板 ;然后在基板上表面對(duì)左邊的兩個(gè)圖形 (矩形和圓 形) 拔高
3、一個(gè)適當(dāng)?shù)母叨?; 對(duì)于右邊的兩個(gè)圖形 ,先在 基板上表面建立外輪廓 ( 矩形和圓形) ,然后將其拔高
總體思想
我們可以把二維圖看成是三維浮雕圖向某平面的 投影 。這樣 ,我們需要做的就是將二維投影恢復(fù)成三 維形體 。不過(guò) ,由于二維圖中的圖形不包括三維信息 , 例如三維浮雕圖中的立方體投影可能只是一個(gè)矩形 , 一個(gè)曲面投影可能是一條曲線 ,一個(gè)平面投影可能只 是一條直線 。因此 ,我們首先要做的就是要確定平面 圖形中的形體在三維中空間對(duì)應(yīng)的形體該是什么 ( 當(dāng) 然這個(gè)要求似乎有點(diǎn)苛刻 ,但是作為設(shè)計(jì)者來(lái)說(shuō) ,理所 應(yīng)當(dāng)知道他將要設(shè)計(jì)的是什么) ,再將這些形體分成三 類 ———簡(jiǎn)單形
4、體 , 較復(fù)雜的規(guī)則形體 , 復(fù)雜的自由形 體 ,然后再利用計(jì)算機(jī)輔助設(shè)計(jì)手段令其以三維的形 態(tài)展現(xiàn)出來(lái) ,之后設(shè)計(jì)者便可以對(duì)三維浮雕進(jìn)行交互 修改和設(shè)計(jì) ,直到得到滿意的浮雕圖為止 。
1
一定的高度 ,同時(shí)要求提供一個(gè)拔模斜度以生成臺(tái)體 。
2 . 2 規(guī)則的復(fù)雜形體轉(zhuǎn)換
圖 2 規(guī)則的復(fù)雜圖形的轉(zhuǎn)換
對(duì)于圖 2 所示的稍微復(fù)雜一些的圖形來(lái)說(shuō) ,可以 通過(guò)對(duì)簡(jiǎn)單圖形的布爾運(yùn)算 ———“交 ,差 ,并”以及形體 掃描法將其構(gòu)造出來(lái) ,因?yàn)檫@些圖形實(shí)際上是很規(guī)則 的 。例如圖 2 ( 左) 所示的四個(gè)圖形 ,在確定平面圖形 中各個(gè)形體所表達(dá)的立體圖形的具體形態(tài)后 ,我們可 以采
5、用下面的步驟便可將其轉(zhuǎn)換成圖 2 ( 右) 所示的立 體浮雕圖了 :左上的圖形通過(guò)兩個(gè)大小不一的半球體 進(jìn)行布爾“并”運(yùn)算 ; 左下的圖形實(shí)際上是一條曲線繞 中心軸回轉(zhuǎn) 360 度而形成的掃描體 ; 右上的圖形則是 一個(gè)小圓沿一段半圓弧掃描形成的掃描體 ; 右下方的 圖形則是先生成一個(gè)帶曲線邊的不規(guī)則平面面域 ,然 后沿一直線掃描得到一個(gè)掃描體后再與一個(gè)小圓柱體 進(jìn)行布爾“差”運(yùn)算 。
2 . 3 自由形體轉(zhuǎn)換
前面討論的是規(guī)則圖形 ,但是我們?cè)趯?shí)際情況下 遇到的浮雕圖可能是很復(fù)雜的不規(guī)則圖形 ———自由形 體 。對(duì)于這些由由形體來(lái)說(shuō) ,他們的轉(zhuǎn)換就要復(fù)雜得 多了 ,但是在要求不是很高的場(chǎng)
6、合 ,我們可以采用細(xì)分
具體轉(zhuǎn)換方法
下面 ,我們將討論在二維圖向三維浮雕圖轉(zhuǎn)換時(shí) 將用到的主要轉(zhuǎn)換方法 。當(dāng)然 ,本文的目的是在于討 論轉(zhuǎn)換方法 ,因此我們采用的示例圖形都是比較簡(jiǎn)單 的圖形以便于理解 。
2 . 1 簡(jiǎn)單形體轉(zhuǎn)換
2
圖 1
簡(jiǎn)單圖形的轉(zhuǎn)換
操作的統(tǒng)一性 ,我們不能直接對(duì)斜面進(jìn)行細(xì)分 ,而是采
由形體的轉(zhuǎn)換 。
用圖 4 所示的方法 ,將正方形 abcd 拾高 1/ 2 個(gè)斜面的
高度得到一個(gè)新的正方形 a′b′c′d′,然后再對(duì)這個(gè)正方 形進(jìn)行細(xì)分操作 。由于我們可以通過(guò)推算得到正方形 abcd 的四個(gè)頂點(diǎn)的坐標(biāo)值 ,再加上
7、我們已知的角度α,
因此正方形 a ,b′c′d′的頂點(diǎn)坐標(biāo)值也能很容易的推算
出來(lái) 。正方形繞 X 軸旋轉(zhuǎn)后的處理方法類似 。
(3) 數(shù)據(jù)結(jié)構(gòu)
最后 ,我們還必須選取合理的數(shù)據(jù)結(jié)構(gòu)來(lái)描述四 叉樹所表達(dá)的信息 。這一結(jié)構(gòu)除了能有效的存取外 , 還應(yīng)盡可能減小內(nèi)存的消耗 ,同時(shí)也要考慮占用盡可
能少的磁盤空間 。當(dāng)采用了前面的編碼方案后 ,枝結(jié) 點(diǎn)的位置信息 ( 主要指 X , Y 方向的坐標(biāo)值 , Z 方向的
坐標(biāo)值將通過(guò)進(jìn)行的轉(zhuǎn)換操作來(lái)計(jì)算) 完全隱藏在葉
圖 3 四叉樹細(xì)分技術(shù)及四叉樹表示
2 . 3 . 1 四叉樹細(xì)分技術(shù)的主要思想 首先我們用一個(gè)初始正方形去包圍
8、我們要處理的
平面圖形 ,然后將這個(gè)正方形平分成四個(gè)子正方形 ,現(xiàn)
在我們可以對(duì)這四個(gè)子正方形進(jìn)行轉(zhuǎn)換操作 ———從簡(jiǎn) 單考慮 ,我們?cè)试S的操作只有許沿 Z 軸正方向 (或負(fù)方
向) 抬高一定距離 ,或者沿 X 軸 ( 或 Y 軸) 旋轉(zhuǎn)一個(gè)角 度α如果對(duì)現(xiàn)在這個(gè)子正方形操作后的結(jié)果還不滿意 的話 ,可以繼續(xù)將該子正方形進(jìn)一步細(xì)分成四個(gè)更小
的正方形 ,然后再對(duì)這些更小的正方形進(jìn)行轉(zhuǎn)換操作 。 這個(gè)過(guò)程將一直持續(xù)進(jìn)行到滿意為止 。這樣我們便可 以得到類似圖 3 (右) 所示的一棵四叉樹 。
2 . 3 . 2 四叉樹細(xì)分技術(shù)的實(shí)現(xiàn)
(1) 結(jié)點(diǎn)編碼
為有效地存取四叉樹中的結(jié)
9、點(diǎn)信息 ,我們對(duì)樹中 的每一結(jié)點(diǎn)進(jìn)行如下編碼 : 首先指定四個(gè)正方形中距
原點(diǎn) (0 ,0 ,0) 最近的正方形編號(hào)為 0 ,其相鄰結(jié)點(diǎn)的編
號(hào)沿 X 軸方向增 1 ,沿 Y 軸方向增 2 ( 則最初的四個(gè)正 方形編號(hào)如圖 3 所示) ,并把父結(jié)點(diǎn)的編號(hào)放在子結(jié)點(diǎn) 的前面一起作為子結(jié)點(diǎn)的編碼的一部分 ; 為保證四叉
樹中每一結(jié)點(diǎn)有相同長(zhǎng)度的編碼 ,可以在結(jié)點(diǎn)編碼的 后面填充一些特殊字符 ,如‘F’,那么每一個(gè)樹結(jié)點(diǎn)的 編碼均可以表示為 ql q2 qi FF F 。其中 ,qi ∈{0 ,1 ,2 ,
3} ,i ∈1 ,n 。例如 ,如果采用 8 位編碼 ,
10、則圖 3 ( 左) 中 小正 方 形 a 的 編 碼 為 122FFFF , 其 父 結(jié) 點(diǎn) 編 碼 為
12FFFFFF ,祖父結(jié)點(diǎn)編碼為 1FFFFFF 如圖 3 (右) 所示 。
(2) 正方形繞 Y(或 X) 軸旋轉(zhuǎn)后的細(xì)分方法
結(jié)點(diǎn)的編碼中 。例如 ,如果葉結(jié)點(diǎn)的編碼為 q q qiFF
l 2
F ,那么他的父結(jié)點(diǎn)的編碼就為 ql q2
父接點(diǎn)的編碼就為 ql q2 qi - 2 FF F
qi - 1 FF F , 祖
等等 。同時(shí) ,
由于我們細(xì)分過(guò)程采用的都是正方形 ,因此任意結(jié)點(diǎn)
的位置信息可以通過(guò)編碼和初始正方形的邊長(zhǎng)和一個(gè) 初始點(diǎn)很容易推算出
11、來(lái) 。這樣在結(jié)點(diǎn)數(shù)據(jù)結(jié)構(gòu)中我們
就不用存放結(jié)點(diǎn)的平面位置信息了 ,因此減少了數(shù)據(jù)
存儲(chǔ)占用的磁盤空間 。但是 ,我們?cè)诮Y(jié)點(diǎn)中必須保存 我們進(jìn)行的轉(zhuǎn)換操作信息 ———沿 Z 軸正方向或負(fù)方向
抬高的距離 ,或者沿 X 軸或 Y 軸旋轉(zhuǎn)的角度 ,通過(guò)這
些信息我們才能獲得圖形的三維信息 。另外 ,從減小 內(nèi)存消耗的角度考慮 ,我們把四叉樹的信息通過(guò)鏈表 的形式表示出來(lái) 。綜上所述 ,我們對(duì)四叉樹中各結(jié)點(diǎn) 的數(shù)據(jù)結(jié)構(gòu)的定義如下 :
根結(jié)點(diǎn) ———指向四個(gè)子結(jié)點(diǎn)的指針 ,一個(gè)初始點(diǎn)
(一般是坐標(biāo)最小的點(diǎn)) 值 ,初始正方形的邊長(zhǎng) ;
枝結(jié)點(diǎn) ———指向四個(gè)子結(jié)點(diǎn)的指針 ,自己的編碼 ,
12、
轉(zhuǎn)換操作的信息 ;
葉結(jié)點(diǎn) ———同枝結(jié)點(diǎn) ,但是四個(gè)指向子結(jié)點(diǎn)的指 針全部設(shè)為空值 。
這樣 ,我們就可以通過(guò)遍歷這棵四叉樹來(lái)建立我
們所需要的三維浮雕圖了 。
總結(jié)
由前面的討論可以看出 ,對(duì)于一副二維圖來(lái)說(shuō) ,在 確定圖形的具體三維形態(tài)之后 ,就可以綜合利用抬高 平面圖形 ,簡(jiǎn)單實(shí)體的布爾運(yùn)算 ,形體掃描法 ,以及自 由形體的四叉樹細(xì)分等方法來(lái)實(shí)現(xiàn)從二維圖到三維浮 雕圖的轉(zhuǎn)換 。
參 考 文 獻(xiàn)
3
譚建榮 ,計(jì)算機(jī)工程圖學(xué)的探索與實(shí)踐. 北京 : 電子工業(yè)出
版社 ,1994 ,4
陳元琰 ,張曉競(jìng). 計(jì)算機(jī)圖形學(xué)實(shí)用技術(shù) 1 北京 : 科學(xué)出版 社 ,2000 ,9
彭群生 ,鮑虎軍 ,金小剛 1 計(jì)算機(jī)真實(shí)感圖形的算法基礎(chǔ).
北京 :科學(xué)出版社 ,1999
DonaldHearn ,M. Pauli He Baker 著 , 蔡士杰等譯. 計(jì)算機(jī)圖形 學(xué). 北京 : 電子工業(yè)出版社 ,1998
1
2
3
圖 4 正方形繞 Y 軸旋轉(zhuǎn)后的細(xì)分方法
如圖 4 所示 ,當(dāng)某個(gè)正方形 abcd 沿 Y 軸旋轉(zhuǎn)一個(gè) 角度α后將得到一個(gè)斜面四邊形 adef 。如果要繼續(xù)對(duì)
4