日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

计算机图形学—— 隐藏线和隐藏面的消除(消隐算法)

發(fā)布時(shí)間:2023/12/13 综合教程 23 生活家
生活随笔 收集整理的這篇文章主要介紹了 计算机图形学—— 隐藏线和隐藏面的消除(消隐算法) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概述

由于投影變換失去了深度信息,往往導(dǎo)致圖形的二義性。要消除二義性,就必須在繪制時(shí)消除被遮擋的不可見的線或面,習(xí)慣上稱作消除隱藏線和隱藏面(或可見線判定、可見面判定),或簡稱為消隱。經(jīng)過消隱得到的投影圖稱為物體的真實(shí)感圖形。

下面這個(gè)圖就很好體現(xiàn)了這種二義性。

消隱后的效果圖:

消隱算法的分類

所有隱藏面消隱算法必須確定:
在沿透視投影的投影中心或沿平行投影的投影方向看過去哪些邊或面是可見的

兩種基本算法

1、以構(gòu)成圖像的每一個(gè)像素為處理單元,對場景中的所有表面,確定相對于觀察點(diǎn)是可見的表面,用該表面的顏色填充該像素.
適于面消隱。

算法步驟:

a.在和投影點(diǎn)到像素連線相交的表面中,找到離觀察點(diǎn)最近的表面;
b.用該表面上交點(diǎn)處的顏色填充該像素;

2、以三維場景中的物體對象為處理單元,在所有對象之間進(jìn)行比較,除去完全不可見的物體和物體上不可見的部分.適于面消隱也適于線消隱。

算法步驟:
a.判定場景中的所有可見表面;
b.用可見表面的顏色填充相應(yīng)的像素以構(gòu)成圖形;

提醒注意

1.假定構(gòu)成物體的面不能相互貫穿,也不能有循環(huán)遮擋的情況。
2.假定投影平面是oxy平面,投影方向?yàn)閦軸的負(fù)方向。

如果構(gòu)成物體的面不滿足該假定,可以把它們剖分成互不貫穿和不循環(huán)遮擋的情況。
例如,用圖b中的虛線便可把原來循環(huán)遮擋的三個(gè)平面,分割成不存在循環(huán)遮擋的四個(gè)面。

二、可見面判斷的有效技術(shù)

1、邊界盒

指能夠包含該物體的一個(gè)幾何形狀(如矩形/圓/長方體等),該形狀有較簡單的邊界。

邊界盒技術(shù)用于判斷兩條直線是否相交。

進(jìn)一步簡化判斷

2、后向面消除(Back-face Removal)

思路:把顯然不可見的面去掉,減少消隱過程中的直線求交數(shù)目

如何判斷:根據(jù)定義尋找外(或內(nèi))法向,若外法向背離觀察者,或內(nèi)法向指向觀察者,則該面為后向面。

注意:如果多邊形是凸的,則可只取一個(gè)三角形計(jì)算有向面積sp。如果多邊形不是凸的,只取一個(gè)三角形計(jì)算有向面積sp可能會出現(xiàn)錯(cuò)誤,即F所在的面為前向面也可能出現(xiàn)sp≥0的情況,因此,需按上式計(jì)算多邊形F的有向面積。如果sp ≥0,則F所在的面為后向面。

3、非垂直投影轉(zhuǎn)化成垂直投影

物體之間的遮擋關(guān)系與投影中心和投影方向有著密切的關(guān)系,因此,對物體的可見性判定也和投影方式有密切的關(guān)系。

垂直投影的優(yōu)點(diǎn):進(jìn)行投影時(shí)可以忽略z值,即:實(shí)物的(x,y)可直接做為投影后的二維平面上的坐標(biāo)(x,y)

上述討論說明,垂直投影比非垂直投影容易實(shí)現(xiàn),并且計(jì)算量小。因此在進(jìn)行消隱工作之前,首先應(yīng)將非垂直投影轉(zhuǎn)換成垂直投影,從而降低算法的復(fù)雜性,提高運(yùn)算速度。

如何把透視投影變?yōu)榇怪蓖队?其本質(zhì)是把棱臺變成長方體。

三、基于窗口的子分算法(Warnack算法)

是一種分而治之(Divide-Conquer)的算法。

1、關(guān)系判斷

2、可見性判斷

3、分隔結(jié)束條件

4、提高效率的有效的處理技術(shù)

5、算法描述

用多邊形的邊界對區(qū)域作劃分,其目的是盡量減少對區(qū)域劃分的次數(shù)--利用裁剪算法

四、八叉樹算法

為了生成真實(shí)感圖形,關(guān)鍵問題之一就是對圖像空間的每一個(gè)像素進(jìn)行處理。從場景中所有的在該像素上有投影的表面中確定相對于觀察點(diǎn)是可見表面。為了提高算法效率,自然是希望從可能在像素上有投影的面片中尋找可見表面。八叉樹算法是快速尋找可見面的一種有效方法,是一種搜索算法。

基本思想:將能夠包含整個(gè)場景的立方體,即八叉樹的根結(jié)點(diǎn),按照x,y,z三個(gè)方向中的剖面分割成八個(gè)子立方體,稱為根結(jié)點(diǎn)的八個(gè)子結(jié)點(diǎn)。對每一個(gè)子立方體,如果它包含的表面片少于一個(gè)給定的值,則該子立方體為八叉樹的終端結(jié)點(diǎn),否則為非終端結(jié)點(diǎn)并將其進(jìn)一步分割成八個(gè)子立方體;重復(fù)上述過程,直到每個(gè)小立方體所包含的表面片少于一個(gè)給定的值,分割即告終止。

那么對于上述圖所示,視圖平面法向量(1,1,1)那么此時(shí)它的一個(gè)排列是0,1,2,4,3,5,6,7,即最遠(yuǎn)的八分體是0,與八分體0共享一個(gè)面的三個(gè)相鄰八分體是1,2和4,與最近八分體7的3個(gè)相鄰八分體是3,5和6。

五、Z緩沖器算法

1、算法描述

z緩沖器算法是最簡單的隱藏面消除算法之一。
基本思想:對屏幕上每一個(gè)像素點(diǎn),過像素中心做一條投影線,找到此投影線與所有多邊形交點(diǎn)中離觀察者最近的點(diǎn),此點(diǎn)的屬性(顏色或灰度)值即為這一屏幕像素點(diǎn)的屬性值。

需要兩個(gè)緩沖器數(shù)組,即:z緩沖器數(shù)組和幀緩沖器數(shù)組,分別設(shè)為 Zdepth[ ][ ] 與 Frame[ ][ ]
z緩沖器是一組存貯單元,其單元個(gè)數(shù)和屏幕上像素的個(gè)數(shù)相同,也和幀緩沖器的單元個(gè)數(shù)相同,它們之間一一對應(yīng)。
幀緩沖器每個(gè)單元存放對應(yīng)像素的顏色值;z緩沖器每個(gè)單元存放對應(yīng)像素的深度值;

2、算法實(shí)現(xiàn)

算法的復(fù)雜性正比于m*n*N,在屏幕大小即m*n一定的情況下,算法的計(jì)算量只和多邊形個(gè)數(shù)N成正比

3、優(yōu)缺點(diǎn)

z-Buffer算法沒有利用圖形的相關(guān)性和連續(xù)性,這是z-Buffer算法的嚴(yán)重缺陷,更為嚴(yán)重的是,該算法是像素級上的消隱算法。

六、掃描線z緩沖器算法

1、算法描述

將z緩沖器的單元數(shù)置為和一條掃描線上的像素?cái)?shù)目相同。
從最上面的一條掃描線開始工作,向下對每一條掃描線作如下處理:

掃描線算法也屬于圖像空間消隱算法。該算法可以看作是多邊形區(qū)域填充里介紹過的邊相關(guān)掃描線填充算法的延伸。不同的是在消隱算法中處理的是多個(gè)面片,而多邊形填充中是對單個(gè)多邊形面進(jìn)行填充。

2、數(shù)據(jù)結(jié)構(gòu)

對每個(gè)多邊形,檢查它在oxy平面上的投影和當(dāng)前掃描線是否相交?
若不相交,則不考慮該多邊形。
如果相交,則掃描線和多邊形邊界的交點(diǎn)是成對地出現(xiàn)
每對交點(diǎn)中間的像素計(jì)算多邊形所在平面對應(yīng)點(diǎn)的深度(即z值),并和z緩沖器中相應(yīng)單元存放的深度值作比較
若前者大于后者,則z緩沖器的相應(yīng)單元內(nèi)容要被求得的平面深度代替,幀緩沖器相應(yīng)單元的內(nèi)容也要換成該平面的屬性。
對所有的多邊形都作上述處理后,幀緩沖器中這一行的值便反應(yīng)了消隱后的圖形。
對幀緩沖器每一行的單元都填上相應(yīng)內(nèi)容后就得到了整個(gè)消隱后的圖。

每處理一條掃描線,都要檢查各多邊形是否和該線相交,還要計(jì)算多邊形所在平面上很多點(diǎn)的z值,需要花費(fèi)很大的計(jì)算
為了提高算法效率,采用跟多邊形掃描轉(zhuǎn)換中的掃描線算法類似的數(shù)據(jù)結(jié)構(gòu)和算法.

多邊形Y表

實(shí)際上是一個(gè)指針數(shù)組 ,每個(gè)表的深度和顯示屏幕行數(shù)相同.將所有多邊形存在多邊形Y表中,根據(jù)多邊形頂點(diǎn)中Y坐標(biāo)最大值,插入多邊形Y表中的相應(yīng)位置,多邊形Y表中保存多邊形的序號和其頂點(diǎn)的最大y坐標(biāo).

邊Y表

要注意:Δx是下一條掃描線與邊交點(diǎn)的x減去當(dāng)前的掃描線與邊交點(diǎn)的x。

多邊形活化表

邊對活化表

其實(shí)這里最難理解的就是Δyl和Δxr了,這里的意思就是當(dāng)前掃描線所處的y值和與該掃描線相交邊的最小y值的差值。

就比如說掃描線y=6,與第一個(gè)三角形有兩個(gè)交點(diǎn),左交點(diǎn)(4,6),右交點(diǎn)(7,6)那么Δyl=6-3 Δyr=6-3

3、重溫算法目標(biāo)

對每一條掃描線,檢查對每個(gè)多邊形的投影是否相交,如相交則交點(diǎn)成對出現(xiàn),對每對交點(diǎn)中間的每個(gè)像素計(jì)算多邊形所在平面對應(yīng)點(diǎn)的深度(即z值),并和z緩沖器中相應(yīng)單元存放的深度值作比較,若前者大于后者,則z緩沖器的相應(yīng)單元內(nèi)容要被求得的平面深度代替,幀緩沖器相應(yīng)單元的內(nèi)容也要換成該平面的屬性。
對所有的多邊形都作上述處理后,幀緩沖器中這一行的值便反應(yīng)了消隱后的圖形,對幀緩沖器每一行的單元都填上相應(yīng)內(nèi)容后也就得到了整個(gè)消隱后的圖。

4、算法步驟

算法描述如下

七、優(yōu)先級排序表算法

1、算法思想

優(yōu)先級排序表算法按多邊形離觀察者的遠(yuǎn)近來建立一個(gè)多邊形排序表,距觀察者遠(yuǎn)的優(yōu)先級低,放在表頭;近的優(yōu)先級高,放在表尾
從優(yōu)先級低的多邊形開始,依次把多邊形的顏色填入幀緩沖存儲器中
表中距觀察者近的元素覆蓋幀緩沖存儲器中原有的內(nèi)容
當(dāng)優(yōu)先級最高的多邊形的圖形送入幀緩沖器后,整幅圖形就形成了
類似于油畫家繪畫過程,因此又稱為油畫家算法。

2、算法的優(yōu)缺點(diǎn)

算法的優(yōu)點(diǎn):
簡單,容易實(shí)現(xiàn),并且可以作為實(shí)現(xiàn)更復(fù)雜算法的基礎(chǔ);
缺點(diǎn):
只能處理不相交的面,而且深度優(yōu)先級表中面的順序可能出錯(cuò).

該算法不能處理某些特殊情況。

解決辦法:把P沿Q平面一分為二,從多邊形序列中把原多邊形P去掉,把分割P生成的兩個(gè)多邊形加入鏈表中。具體實(shí)現(xiàn)時(shí),當(dāng)離視點(diǎn)最遠(yuǎn)的多邊形P和其他多邊形交換時(shí),要對P做一標(biāo)志,當(dāng)有標(biāo)志的多邊形再換成離視點(diǎn)最遠(yuǎn)的多邊形時(shí),則說明出現(xiàn)了上述的現(xiàn)象,可用分割方法進(jìn)行處理

用來解決動(dòng)態(tài)顯示問題時(shí),可大大提高效率

八、光線投射算法

1、算法原理

要處理的場景中有無限多條光線,從采樣的角度講我們僅對穿過像素的光線感興趣,因此,可考慮從像素出發(fā),逆向追蹤射入場景的光線路徑

2、算法實(shí)現(xiàn)

由視點(diǎn)出發(fā)穿過觀察平面上一像素向場景發(fā)射一條射線
求出射線與場景中各物體表面的交點(diǎn)
離視點(diǎn)最近的交點(diǎn)的顏色即為像素要填的顏色。
光線投射算法對于包含曲面,特別是包含球面的場景有很高的效率。

總結(jié)

以上是生活随笔為你收集整理的计算机图形学—— 隐藏线和隐藏面的消除(消隐算法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。