亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于射線法的凹多面體消隱算法研究與實(shí)現(xiàn)

        2014-09-27 18:45:06衛(wèi)洪春
        現(xiàn)代電子技術(shù) 2014年8期

        摘要: 為了在計算機(jī)中得到空間圖形的立體感顯示效果,只能在輸出界面顯示空間圖形中朝向觀察者的表面,而其余部分則不被顯示??臻g立體可采用多邊形建模。簡單凸多面體的求解較容易,但凹多面體的求解則相對困難。在此利用圖形學(xué)中的平移、旋轉(zhuǎn)、正平行投影、深度緩存消隱算法、射線法等相關(guān)理論,結(jié)合可視化的MFC開發(fā)平臺,研究并實(shí)現(xiàn)了一個凹多面體表面的全方位觀察,對進(jìn)一步研究消隱算法及射線法的改進(jìn)具有較好的參考作用。

        關(guān)鍵詞: 平行投影; 消隱算法; 射線法; 凹多面體

        中圖分類號: TN919?34; TP391文獻(xiàn)標(biāo)識碼: A文章編號: 1004?373X(2014)08?0129?03

        Research and implementation of ray method based blanking algorithm for concave polyhedron

        WEI Hong?chun

        (Department of Computer Science, Sichuan University of Arts and Science, Dazhou 635000, China)

        Abstract: In order to display three?dimensional graphics in the computer, only the surfaces of objects toward the observer are showed in the output interface, but the rests are not displayed. The three?dimensional model can be established by polygon. Its easy to solve simple convex polyhedron, but the concave polyhedron is not. In combinstion with visual MFC development platform, the all?round observation about the concave polyhedron is studied and implemented by using the theories of translation, rotation and parallel projection, depth buffer blanking algorithm, and ray method in graphics. It's a good reference to further research the improvements of blanking algorithm and ray method.

        Keywords: paralell projection; blanking algorithm; ray method; concave polyhedron

        0引言

        在觀察不透明物體時,只能看到物體朝向觀察者的表面。當(dāng)用計算機(jī)生成具有立體感的圖形時,利用消隱算法可以得到一個確定的、立體感強(qiáng)的投影圖。隱線、隱面消除算法與排序算法相關(guān)。排序的依據(jù)是被顯示的點(diǎn)、線、面或體與觀察點(diǎn)之間的幾何距離。對于簡單的凸多面體,可利用平面法線向量與視線向量的關(guān)系快速求解,但對于凹多面體,其求解算法較凸多面體復(fù)雜得多。本文利用射線法的深度緩存消隱算法和正平行投影的相關(guān)理論,研究并實(shí)現(xiàn)了一個凹多面體在鍵盤控制下的全方位顯示,對進(jìn)一步研究消隱算法及射線法的改進(jìn)具有較好的參考。

        1基本理論

        在計算機(jī)中,復(fù)雜立體可以借助三角形、四邊形等平面多邊形完成建模,若要生成具有立體感的圖形,須借助三維圖形變換中相關(guān)算法,包括平移、旋轉(zhuǎn)、縮放、投影、消隱等。但凹多面體僅這些理論還不夠,必須運(yùn)用計算幾何中的其他相關(guān)知識,如角度和或射線法判斷一個點(diǎn)是否在一個平面多邊形內(nèi),快速排斥與交叉跨立判斷兩條線段是否相交等。相關(guān)算法理論的簡介如下。

        1.1消隱方法

        (l) 背面消除算法

        背面消除算法是隱藏面消除算法中的關(guān)鍵部分。在消隱問題中,最簡單的問題是單個凸多面體。此時,利用背面消除即可達(dá)到隱面消除的目的。為了確定凸多面體的不可見面,對于每個面進(jìn)行如下操作:

        ① 求平面法向量n;

        ② 求平面的視線向量v;

        ③ 計算v·n;

        ④ 根據(jù)v·n符號判別該面是否可見。

        (2) 深度緩存Z?buffer消隱算法

        深度緩存(Z?buffer)是在圖像空間下的消隱算法,包括:幀緩沖器(保存各像素顏色值CB)和z緩沖器zBuffer(保存各像素處物體深度值ZB)。其中z 緩沖器中的單元與幀緩沖器中的單元一一對應(yīng)。

        算法思想:首先用給定深度值初始化z 緩沖器。當(dāng)改變某個像素的顏色時,先檢查當(dāng)前像素點(diǎn)的深度值是否大于該像素原來的深度值,若大于,說明當(dāng)前像素點(diǎn)更靠近觀察點(diǎn),則用當(dāng)前色替換像素原來的顏色;否則說明當(dāng)前像素點(diǎn)不可見,像素的顏色值不改變。Z?buffer 算法的實(shí)現(xiàn)步驟如下:

        ① 初始化ZB和CB,使ZB(i,j)=Zmax,CB(i,j)=背景色。其中,i=1,2,…,m,j=1,2,…,n。

        ② 對某個多邊形,計算它在點(diǎn)(i,j)處的深度值zi,j。

        ③ 若zij

        ④ 對每個多邊形重復(fù)②,③兩步后,在CB中存放的就是消隱后的圖形[1?2]。

        1.2射線法判斷點(diǎn)與平面多邊形的位置

        利用射線法判斷一個平面點(diǎn)M是否位于一個多邊形內(nèi)部的原理如下:

        從點(diǎn)M向左作水平射線,若M在多邊形內(nèi)部,則該射線與多邊形的交點(diǎn)為奇數(shù);若M在多邊形外部,則交點(diǎn)個數(shù)必為偶數(shù)(包含0個)。順序考慮多邊形的每條邊,便可求出該射線與各邊交點(diǎn)的總數(shù)。

        對于平面多邊形的某條邊PQ的特殊情況處理:

        (1) 若射線穿過頂點(diǎn)P或Q,則會重復(fù)計數(shù)。處理規(guī)則是如果穿過的頂點(diǎn)縱坐標(biāo)是PQ中較小的則忽略。

        (2) 如果PQ為水平線段,則有可能與射線“重合”。處理規(guī)則是P點(diǎn)要么在PQ上,要么不在。只需在開始判斷一下是否在PQ上[3?5]。

        2算法設(shè)計與實(shí)現(xiàn)

        在VC 6.0開發(fā)平臺下,新建一基于MFC的單文檔的名為CWhc3DTransform工程,在視圖類中添加按鍵響應(yīng)函數(shù)OnKeyDown()、判斷點(diǎn)是否位于位于多邊形內(nèi)的函數(shù)PointInPolygon()。完成凹多面體深度緩存消隱算法的詳細(xì)設(shè)計如下:

        int zBuffer[MAXNUM][MAXNUM];//深度緩存,外部數(shù)組

        int cBuffer[MAXNUM][MAXNUM];//顏色緩存,外部數(shù)組

        CWhc3DTransformView()

        {//在構(gòu)造函數(shù)中完成凹多邊體相關(guān)數(shù)據(jù)的初始化

        初始化顏色緩存與對應(yīng)像素點(diǎn)的深度緩存

        初始化凹多面體的各個頂點(diǎn)坐標(biāo)

        初始化凹多面體各個面的顏色

        初始化多面體的總面數(shù)FN = 8(共8個面)

        初始化faceInfo [ ][ ]。//第二維是面編號,faceInfo[i][0]是該面的頂點(diǎn)數(shù),

        // faceInfo[i][j](j>0)是構(gòu)成該面的頂點(diǎn)序列

        用立體各頂點(diǎn)坐標(biāo)初始化變換后的立體中心到原點(diǎn)的坐標(biāo)分量

        初始化變換后的立方體的坐標(biāo)分量

        將變換后的立方體平移到指定位置

        初始化立方體相對于其起始狀態(tài)的各坐標(biāo)軸的旋轉(zhuǎn)角

        初始化立方體的最大包圍盒

        }

        voidOnDraw(CDC* pDC){ /*根據(jù)在OnKeyDown()中完成的消隱算法,重新繪制該立體*/

        設(shè)置背景為白色

        用給定顏色繪制立體深度緩存中的像素點(diǎn)

        }

        voidOnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {//完成指定的變換及消隱

        初始化顏色緩存與對應(yīng)點(diǎn)的深度緩存

        用多面體的原始頂點(diǎn)坐標(biāo)初始化數(shù)組resultP

        double real_per_degree = 3.1415926/180; //每度所對應(yīng)的弧度數(shù)

        計算在鍵盤相應(yīng)鍵控制下,初始狀態(tài)立方體分別繞坐標(biāo)軸x,y,z旋轉(zhuǎn)后的角度

        生成繞z軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        生成繞x軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        生成繞y軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        將變換后的幾何體平移到指定的位置,以方便顯示

        double zzbufer;//根據(jù)(x,y)計算該面上 (x,y)處的z坐標(biāo)。

        重置立方體的最大包圍盒為初始值

        重新計算立方體的最大包圍盒,即最小的(xmin,ymin)和最大的(xmax,ymax)

        While(若點(diǎn)(i,j)在最大包圍盒中){

        for(k=0;k<總面數(shù)FN;k++){//遍歷每個面,面中的第0號元素記錄了構(gòu)成該面的頂點(diǎn)數(shù)

        if(若(i,j)位于某個面k中){//點(diǎn)(i,j)在第k個面內(nèi)

        根據(jù)該面k的法線向量的z分量

        if(若法線向量的z分量> 0){ /*z>0,該面可見,計算zzbufer坐標(biāo)*/根據(jù)(i,j)計算該面上該點(diǎn)的zzbufer分量,即(i,j,zzbufer)

        if(zzbufer > zBuffer[i][j])

        { /*若(i,j)點(diǎn)處的z坐標(biāo)>該點(diǎn)處的深度*/

        zBuffer[i][j] = (int)zzbufer; //更換(i,j)處的深度值

        cBuffer[i][j] = faceColor[k];//更新顏色緩存(i,j)中的顏色值

        }}}} }

        RedrawWindow();

        }

        intPointInPolygon(int faceK,double xCoord, double yCoord){//判斷點(diǎn)與多邊形的位置關(guān)系

        /* 從第faceK面上的點(diǎn)(xCoord, yCoord)向左產(chǎn)生一條射線,記錄與交點(diǎn)相交的個數(shù)counter*/

        獲取構(gòu)成第faceK面的頂點(diǎn)數(shù)并保存在pointNum中

        初始化交點(diǎn)個數(shù)counter = 0;

        將第faceK面中各頂點(diǎn)轉(zhuǎn)存到數(shù)組vertemp

        for(i=0;i

        p=第i點(diǎn),q=第((i+1)% pointNum)點(diǎn)

        若點(diǎn)(xCoord, yCoord)在線段pq上,則return 1;

        若線段pq是水平的,則continue;

        //若處于相交線段的端點(diǎn),取y坐標(biāo)大的以避免重復(fù)計數(shù)

        若射線穿過的頂點(diǎn)縱坐標(biāo)是PQ中較大的,

        則counter++;

        若射線穿過的頂點(diǎn)縱坐標(biāo)是QP中較大的,

        則counter++;

        若(利用快速排斥與交叉跨立實(shí)驗判斷當(dāng)yCoord不是線段兩端點(diǎn),且線段pq與射線相交時)

        counter++;

        }

        return (counter % 2); //返回交點(diǎn)的個數(shù)是否為奇數(shù)

        }

        通過以上算法,給定的凹多面體可在鍵盤的上下左右鍵、Insert鍵、Delete鍵的控制下,完成在各種狀態(tài)下的消隱顯示[6]。運(yùn)算結(jié)果如圖1~圖3所示(部分狀態(tài)下的顯示截圖)。

        圖1 初始狀態(tài)的消隱

        3結(jié)語

        在計算機(jī)中,獲得物體的具有立體感的顯示效果是一個較復(fù)雜的過程,涉及的算法較多,且人們對消隱算法的研究還在繼續(xù),以期獲取更好顯示效果。本文利用平行投影算法、基于射線法的深度緩存消隱算法研究并實(shí)現(xiàn)了一個凹多面體的立體顯示過程,可以全方位地觀察物體在各種位置的消隱狀態(tài),獲得了較好的演示效果,并且能容易地將此算法改為詳細(xì)的實(shí)現(xiàn)代碼,對進(jìn)一步研究射線法、消隱算法的改進(jìn)具有較好的參考作用。

        圖2 施行變換后的消隱(1)

        圖3 施行變換后的消隱(2)

        參考文獻(xiàn)

        [1] 王汝傳,黃海平,林巧民.計算機(jī)圖形學(xué)教程[M].2版.北京:人民郵電出版社,2009.

        [2] 和青芳.計算機(jī)圖形學(xué)原理及算法教程(Visual C++版)[M].

        2版.北京:清華大學(xué)出版社,2010.

        [3] 陳瑞卿,周健,虞烈.一種判斷點(diǎn)與多邊形關(guān)系的快速算法[J].西安交通大學(xué)學(xué)報,2007,41(1):59?63.

        [4] 馬晨,張毅.一種改進(jìn)的點(diǎn)與多邊形關(guān)系的叉乘判別法[J].測繪科學(xué),2013,38(1):125?127.

        [5] 李楠,肖克炎.一種改進(jìn)的點(diǎn)在多邊形內(nèi)外判斷算法[J].計算機(jī)工程,2012,38(5):30?34.

        [6] 衛(wèi)洪春,彭小利.掃描線多邊形區(qū)域填充算法研究[J].四川文理學(xué)院學(xué)報,2012,22(5):77?82.

        [7] 李雪,石產(chǎn)田.一種三角形內(nèi)外點(diǎn)的快速判定方法[J].現(xiàn)代電子技術(shù),2008,31(4):110?112.

        [8] 夏俊杰,趙剛.基于MFC的代碼編輯器設(shè)計方法[J].現(xiàn)代電子技術(shù),2012,35(12):28?30.

        // faceInfo[i][j](j>0)是構(gòu)成該面的頂點(diǎn)序列

        用立體各頂點(diǎn)坐標(biāo)初始化變換后的立體中心到原點(diǎn)的坐標(biāo)分量

        初始化變換后的立方體的坐標(biāo)分量

        將變換后的立方體平移到指定位置

        初始化立方體相對于其起始狀態(tài)的各坐標(biāo)軸的旋轉(zhuǎn)角

        初始化立方體的最大包圍盒

        }

        voidOnDraw(CDC* pDC){ /*根據(jù)在OnKeyDown()中完成的消隱算法,重新繪制該立體*/

        設(shè)置背景為白色

        用給定顏色繪制立體深度緩存中的像素點(diǎn)

        }

        voidOnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {//完成指定的變換及消隱

        初始化顏色緩存與對應(yīng)點(diǎn)的深度緩存

        用多面體的原始頂點(diǎn)坐標(biāo)初始化數(shù)組resultP

        double real_per_degree = 3.1415926/180; //每度所對應(yīng)的弧度數(shù)

        計算在鍵盤相應(yīng)鍵控制下,初始狀態(tài)立方體分別繞坐標(biāo)軸x,y,z旋轉(zhuǎn)后的角度

        生成繞z軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        生成繞x軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        生成繞y軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        將變換后的幾何體平移到指定的位置,以方便顯示

        double zzbufer;//根據(jù)(x,y)計算該面上 (x,y)處的z坐標(biāo)。

        重置立方體的最大包圍盒為初始值

        重新計算立方體的最大包圍盒,即最小的(xmin,ymin)和最大的(xmax,ymax)

        While(若點(diǎn)(i,j)在最大包圍盒中){

        for(k=0;k<總面數(shù)FN;k++){//遍歷每個面,面中的第0號元素記錄了構(gòu)成該面的頂點(diǎn)數(shù)

        if(若(i,j)位于某個面k中){//點(diǎn)(i,j)在第k個面內(nèi)

        根據(jù)該面k的法線向量的z分量

        if(若法線向量的z分量> 0){ /*z>0,該面可見,計算zzbufer坐標(biāo)*/根據(jù)(i,j)計算該面上該點(diǎn)的zzbufer分量,即(i,j,zzbufer)

        if(zzbufer > zBuffer[i][j])

        { /*若(i,j)點(diǎn)處的z坐標(biāo)>該點(diǎn)處的深度*/

        zBuffer[i][j] = (int)zzbufer; //更換(i,j)處的深度值

        cBuffer[i][j] = faceColor[k];//更新顏色緩存(i,j)中的顏色值

        }}}} }

        RedrawWindow();

        }

        intPointInPolygon(int faceK,double xCoord, double yCoord){//判斷點(diǎn)與多邊形的位置關(guān)系

        /* 從第faceK面上的點(diǎn)(xCoord, yCoord)向左產(chǎn)生一條射線,記錄與交點(diǎn)相交的個數(shù)counter*/

        獲取構(gòu)成第faceK面的頂點(diǎn)數(shù)并保存在pointNum中

        初始化交點(diǎn)個數(shù)counter = 0;

        將第faceK面中各頂點(diǎn)轉(zhuǎn)存到數(shù)組vertemp

        for(i=0;i

        p=第i點(diǎn),q=第((i+1)% pointNum)點(diǎn)

        若點(diǎn)(xCoord, yCoord)在線段pq上,則return 1;

        若線段pq是水平的,則continue;

        //若處于相交線段的端點(diǎn),取y坐標(biāo)大的以避免重復(fù)計數(shù)

        若射線穿過的頂點(diǎn)縱坐標(biāo)是PQ中較大的,

        則counter++;

        若射線穿過的頂點(diǎn)縱坐標(biāo)是QP中較大的,

        則counter++;

        若(利用快速排斥與交叉跨立實(shí)驗判斷當(dāng)yCoord不是線段兩端點(diǎn),且線段pq與射線相交時)

        counter++;

        }

        return (counter % 2); //返回交點(diǎn)的個數(shù)是否為奇數(shù)

        }

        通過以上算法,給定的凹多面體可在鍵盤的上下左右鍵、Insert鍵、Delete鍵的控制下,完成在各種狀態(tài)下的消隱顯示[6]。運(yùn)算結(jié)果如圖1~圖3所示(部分狀態(tài)下的顯示截圖)。

        圖1 初始狀態(tài)的消隱

        3結(jié)語

        在計算機(jī)中,獲得物體的具有立體感的顯示效果是一個較復(fù)雜的過程,涉及的算法較多,且人們對消隱算法的研究還在繼續(xù),以期獲取更好顯示效果。本文利用平行投影算法、基于射線法的深度緩存消隱算法研究并實(shí)現(xiàn)了一個凹多面體的立體顯示過程,可以全方位地觀察物體在各種位置的消隱狀態(tài),獲得了較好的演示效果,并且能容易地將此算法改為詳細(xì)的實(shí)現(xiàn)代碼,對進(jìn)一步研究射線法、消隱算法的改進(jìn)具有較好的參考作用。

        圖2 施行變換后的消隱(1)

        圖3 施行變換后的消隱(2)

        參考文獻(xiàn)

        [1] 王汝傳,黃海平,林巧民.計算機(jī)圖形學(xué)教程[M].2版.北京:人民郵電出版社,2009.

        [2] 和青芳.計算機(jī)圖形學(xué)原理及算法教程(Visual C++版)[M].

        2版.北京:清華大學(xué)出版社,2010.

        [3] 陳瑞卿,周健,虞烈.一種判斷點(diǎn)與多邊形關(guān)系的快速算法[J].西安交通大學(xué)學(xué)報,2007,41(1):59?63.

        [4] 馬晨,張毅.一種改進(jìn)的點(diǎn)與多邊形關(guān)系的叉乘判別法[J].測繪科學(xué),2013,38(1):125?127.

        [5] 李楠,肖克炎.一種改進(jìn)的點(diǎn)在多邊形內(nèi)外判斷算法[J].計算機(jī)工程,2012,38(5):30?34.

        [6] 衛(wèi)洪春,彭小利.掃描線多邊形區(qū)域填充算法研究[J].四川文理學(xué)院學(xué)報,2012,22(5):77?82.

        [7] 李雪,石產(chǎn)田.一種三角形內(nèi)外點(diǎn)的快速判定方法[J].現(xiàn)代電子技術(shù),2008,31(4):110?112.

        [8] 夏俊杰,趙剛.基于MFC的代碼編輯器設(shè)計方法[J].現(xiàn)代電子技術(shù),2012,35(12):28?30.

        // faceInfo[i][j](j>0)是構(gòu)成該面的頂點(diǎn)序列

        用立體各頂點(diǎn)坐標(biāo)初始化變換后的立體中心到原點(diǎn)的坐標(biāo)分量

        初始化變換后的立方體的坐標(biāo)分量

        將變換后的立方體平移到指定位置

        初始化立方體相對于其起始狀態(tài)的各坐標(biāo)軸的旋轉(zhuǎn)角

        初始化立方體的最大包圍盒

        }

        voidOnDraw(CDC* pDC){ /*根據(jù)在OnKeyDown()中完成的消隱算法,重新繪制該立體*/

        設(shè)置背景為白色

        用給定顏色繪制立體深度緩存中的像素點(diǎn)

        }

        voidOnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {//完成指定的變換及消隱

        初始化顏色緩存與對應(yīng)點(diǎn)的深度緩存

        用多面體的原始頂點(diǎn)坐標(biāo)初始化數(shù)組resultP

        double real_per_degree = 3.1415926/180; //每度所對應(yīng)的弧度數(shù)

        計算在鍵盤相應(yīng)鍵控制下,初始狀態(tài)立方體分別繞坐標(biāo)軸x,y,z旋轉(zhuǎn)后的角度

        生成繞z軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        生成繞x軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        生成繞y軸變化的變換陣并計算變換后的頂點(diǎn)坐標(biāo)

        將變換后的幾何體平移到指定的位置,以方便顯示

        double zzbufer;//根據(jù)(x,y)計算該面上 (x,y)處的z坐標(biāo)。

        重置立方體的最大包圍盒為初始值

        重新計算立方體的最大包圍盒,即最小的(xmin,ymin)和最大的(xmax,ymax)

        While(若點(diǎn)(i,j)在最大包圍盒中){

        for(k=0;k<總面數(shù)FN;k++){//遍歷每個面,面中的第0號元素記錄了構(gòu)成該面的頂點(diǎn)數(shù)

        if(若(i,j)位于某個面k中){//點(diǎn)(i,j)在第k個面內(nèi)

        根據(jù)該面k的法線向量的z分量

        if(若法線向量的z分量> 0){ /*z>0,該面可見,計算zzbufer坐標(biāo)*/根據(jù)(i,j)計算該面上該點(diǎn)的zzbufer分量,即(i,j,zzbufer)

        if(zzbufer > zBuffer[i][j])

        { /*若(i,j)點(diǎn)處的z坐標(biāo)>該點(diǎn)處的深度*/

        zBuffer[i][j] = (int)zzbufer; //更換(i,j)處的深度值

        cBuffer[i][j] = faceColor[k];//更新顏色緩存(i,j)中的顏色值

        }}}} }

        RedrawWindow();

        }

        intPointInPolygon(int faceK,double xCoord, double yCoord){//判斷點(diǎn)與多邊形的位置關(guān)系

        /* 從第faceK面上的點(diǎn)(xCoord, yCoord)向左產(chǎn)生一條射線,記錄與交點(diǎn)相交的個數(shù)counter*/

        獲取構(gòu)成第faceK面的頂點(diǎn)數(shù)并保存在pointNum中

        初始化交點(diǎn)個數(shù)counter = 0;

        將第faceK面中各頂點(diǎn)轉(zhuǎn)存到數(shù)組vertemp

        for(i=0;i

        p=第i點(diǎn),q=第((i+1)% pointNum)點(diǎn)

        若點(diǎn)(xCoord, yCoord)在線段pq上,則return 1;

        若線段pq是水平的,則continue;

        //若處于相交線段的端點(diǎn),取y坐標(biāo)大的以避免重復(fù)計數(shù)

        若射線穿過的頂點(diǎn)縱坐標(biāo)是PQ中較大的,

        則counter++;

        若射線穿過的頂點(diǎn)縱坐標(biāo)是QP中較大的,

        則counter++;

        若(利用快速排斥與交叉跨立實(shí)驗判斷當(dāng)yCoord不是線段兩端點(diǎn),且線段pq與射線相交時)

        counter++;

        }

        return (counter % 2); //返回交點(diǎn)的個數(shù)是否為奇數(shù)

        }

        通過以上算法,給定的凹多面體可在鍵盤的上下左右鍵、Insert鍵、Delete鍵的控制下,完成在各種狀態(tài)下的消隱顯示[6]。運(yùn)算結(jié)果如圖1~圖3所示(部分狀態(tài)下的顯示截圖)。

        圖1 初始狀態(tài)的消隱

        3結(jié)語

        在計算機(jī)中,獲得物體的具有立體感的顯示效果是一個較復(fù)雜的過程,涉及的算法較多,且人們對消隱算法的研究還在繼續(xù),以期獲取更好顯示效果。本文利用平行投影算法、基于射線法的深度緩存消隱算法研究并實(shí)現(xiàn)了一個凹多面體的立體顯示過程,可以全方位地觀察物體在各種位置的消隱狀態(tài),獲得了較好的演示效果,并且能容易地將此算法改為詳細(xì)的實(shí)現(xiàn)代碼,對進(jìn)一步研究射線法、消隱算法的改進(jìn)具有較好的參考作用。

        圖2 施行變換后的消隱(1)

        圖3 施行變換后的消隱(2)

        參考文獻(xiàn)

        [1] 王汝傳,黃海平,林巧民.計算機(jī)圖形學(xué)教程[M].2版.北京:人民郵電出版社,2009.

        [2] 和青芳.計算機(jī)圖形學(xué)原理及算法教程(Visual C++版)[M].

        2版.北京:清華大學(xué)出版社,2010.

        [3] 陳瑞卿,周健,虞烈.一種判斷點(diǎn)與多邊形關(guān)系的快速算法[J].西安交通大學(xué)學(xué)報,2007,41(1):59?63.

        [4] 馬晨,張毅.一種改進(jìn)的點(diǎn)與多邊形關(guān)系的叉乘判別法[J].測繪科學(xué),2013,38(1):125?127.

        [5] 李楠,肖克炎.一種改進(jìn)的點(diǎn)在多邊形內(nèi)外判斷算法[J].計算機(jī)工程,2012,38(5):30?34.

        [6] 衛(wèi)洪春,彭小利.掃描線多邊形區(qū)域填充算法研究[J].四川文理學(xué)院學(xué)報,2012,22(5):77?82.

        [7] 李雪,石產(chǎn)田.一種三角形內(nèi)外點(diǎn)的快速判定方法[J].現(xiàn)代電子技術(shù),2008,31(4):110?112.

        [8] 夏俊杰,趙剛.基于MFC的代碼編輯器設(shè)計方法[J].現(xiàn)代電子技術(shù),2012,35(12):28?30.

        99久久国产一区二区三区| 亚洲欧美国产精品久久| 丁香美女社区| 中文字幕无码不卡一区二区三区| av色综合网站| 亚洲一区极品美女写真在线看| 日日噜噜噜夜夜狠狠久久蜜桃 | 手机在线亚洲精品网站| 色www永久免费视频| 亚洲熟妇无码av另类vr影视| 亚洲公开免费在线视频| 人妻系列少妇极品熟妇| 性感女教师在线免费观看| 久人人爽人人爽人人片av| 国产人妻人伦精品1国产盗摄| 日本韩国一区二区三区| 精品蜜桃视频在线观看| 久久综合另类激情人妖| 人妻 偷拍 无码 中文字幕 | 国产香蕉一区二区三区在线视频| 无码人妻精品中文字幕免费| 男女一区视频在线观看| 亚洲欧美中文日韩在线v日本| 欧美黑人性暴力猛交喷水| 久久国产精品波多野结衣av| 中文字幕一区二区三区97| 中文字幕女同人妖熟女| 一区二区在线视频大片| 美女与黑人巨大进入免费观看 | 中文人妻av久久人妻18| 亚洲第一区无码专区| 亚洲码专区亚洲码专区| 亚洲av无码成人精品国产| 中文字幕在线亚洲日韩6页| 女的把腿张开男的猛戳出浆| 久久婷婷色香五月综合激激情| 噜噜中文字幕一区二区| 国产超碰人人爽人人做人人添 | 精品无码国产自产拍在线观看| 日韩精品人妻系列无码专区免费| 久久久久久人妻一区二区无码Av|