當前位置:才華齋>網路>工程製圖>

圖形的繪製方法

工程製圖 閱讀(3.13W)

針對計算機輔助幾何造型中經常用到的各種複雜邊界的平面圖形,基於OpenGL的NURBS曲面繪製及裁剪功能,提出了一種繪製複雜邊界平面圖形的方法,避免了對平面圖形進行網格化處理。以下是小編搜尋整理圖形的繪製方法,歡迎大家閱讀!

圖形的繪製方法

引言

在計算機輔助幾何造型領域,常常會用到各種具有複雜邊界的平面圖形,其邊界不僅有直線,還可能有圓弧等各種曲線。目前OpenGL提供了繪製三角面以及凸多邊形的函式,沒有直接提供繪製凹多邊形及有曲線邊界的平面圖形的方法。但是其擁有強大的NURBS曲面繪製函式,可以繪製任意的NURBS曲面,並且可以裁剪繪製NURBS曲面。由於平面也可以看作是一種最簡單的曲面,所以可以把OpenGL的NURBS曲面繪製功能借鑑到對平面圖形的繪製當中,實現對複雜邊界平面圖形的繪製。

文中圖形是在笛卡爾座標系中的xoy平面上進行討論的,對於不在這個平面上的圖形,也可以在其所在的平面上建立區域性座標系,再按照如下提到的方法進行計算。

1 NURBS及其相關概念

NURBS是NonUniform Rational BSplines的縮寫,表示非均勻有理B樣條的意思。其核心思想在於用多個控制點來表示一條曲線或曲面。

1.1 NURBS控制點

在計算機輔助幾何造型中,常常用到各種各樣的曲線,可以用簡單解析式表示的曲線遠遠不能滿足要求。為了更方便地用來表示曲線、曲面形狀,可以用一系列點來控制和調節曲線、曲面的形狀,這些點被稱為控制點。

在NURBS的理論中,控制點包含兩部分資訊,一部分是點的座標值,另一部分是點的權重。點的座標值表示點在空間中的位置,點的權重值表示點對曲線或曲面的影響大小。三維空間上的控制點可以用四維向量表示,分別代表三個座標和一個權重值。也可以用三維向量表示,這時權重預設為1.0。二維空間上的控制點可以用三維向量表示,代表兩個座標值和一個權重,也可以用二維向量表示,此時權重預設為1.0。

1.2 NURBS曲線、曲面

NURBS曲線用空間中的一組控制點向量表示,每一個點都可以對曲線的形狀有一定的影響。NURBS曲面用空間中的一組控制點矩陣表示。根據NURBS的'解析式,如果確定了控制點,也就可以唯一確定一條曲線或者一條曲面。也正是由於NURBS的這種精確表示的特性,在計算機輔助幾何造型中得到了廣泛的應用。

2 幾種圖形的NURBS表示方法

2.1 曲線

本文僅對工程中最常見的線段和圓弧進行討論,其它曲線可以參照NURBS公式計算其表示方法。

2.1.1 直線段

用2個控制點表示,2個控制點的座標值為線段的端點座標值,權重為1.0。

2.1.2 圓弧

需要按照圓弧的圓心角θ的大小討論,分以下情況:

對於0°<θ≤90°的圓弧,用3個控制點PA,PB,PC表示,其中兩端的控制點PA,PC的座標值分別為圓弧的2個端點的座標值,權重都為1.0。中間的點PB的座標值為圓弧兩個端點處的兩條切線的交點座標值,權重值weight計算公式為:weight=cos(θ2) 。

對於圓心角超過90°的圓弧(包括圓環),可以切成多段圓弧,每段圓弧都不超過90°,再把每段圓弧用上面的方法表示,即用多段圓弧來表示。

2.2 平面矩形

平面矩形用4個控制點表示,4個控制點的座標為矩形4個角點的座標值。為方便起見,可以用三維向量表示,權重預設為1.0。

3 OpenGL中NURBS的特殊說明

3.1 控制點

在OpenGL中表示帶權重的控制點有特殊的表示方法,對於控制點P,若其座標為(x,y,z),權重為weight,則在OpenGL中表示該控制點的四維向量計算公式為:

=(xweight,yweight,zweight, weight)

(1)3.2 曲面裁剪函式

OpenGL中供曲面裁剪呼叫的函式是gluBeginTrim、gluEndTrim與gluNurbssCurve、gluPwlCurve。在進行曲面裁剪開始時呼叫gluBeginTrim函式,在結束時呼叫gluEndTrim函式。用gluNurbsCurve函式和gluPwlCurve函式繪製曲面邊界,其中gluNurbsCurve函式主要用於繪製曲線邊界,gluPwlCurve函式用於繪製直線邊界。為了統一表示,都採用了gluNurbsCurve函式。

4 圖形繪製資料計算

4.1 背景矩形繪製資料計算

對於任意一個平面有界圖形,都可以在其所在的平面上找到若干個矩形,使該圖形的所有部分都在矩形之中。在這些矩形中,兩邊與絕對座標系的x軸與y軸平行且面積最小的矩形稱為背景矩形。該矩陣與x軸方向平行的邊的長度稱為背景矩形的寬,與y軸平行的長度稱為背景矩形的高。該矩形的四條邊分別通過平面有界圖形在x、y軸方向上的最大最小值點。

該方法繪製的思路是先繪製背景矩形,再根據需要繪製平面有界圖形的幾何邊界,對背景矩形進行裁剪,生成一個完整的圖形。

4.2 背景座標系

從z軸的正方向看,以背景矩形的左下角點Pori(xori, yori)為原點,三維空間中的x軸、y軸為座標軸建立直角座標系,這個座標系稱為背景座標系,背景座標系x軸的單位長度設為背景矩形的寬,y軸的單位長度設為背景矩形的高。 4.3 圖形邊界控制點在背景座標系下座標值的計算

由於只討論在xoy平面上的情況,所以不用考慮平面有界圖形上點的z軸座標值,這樣邊界上任意一個控制點的絕對座標只需要用(x,y)兩個座標值表示。對於本文用到背景矩形,僅用到了在xoy平面上、而且兩邊都平行於座標軸的矩形平面圖形,兩端控制點的節點引數設定為標準的0與1。裁剪邊界曲線上控制點在背景矩形上的UV座標可以看作是在背景座標系下的座標。

對於邊界曲線上的控制點,如果其絕對座標為(x,y),則其在背景座標系下的區域性座標(x', y')計算公式為:

x'

y'= x-xori

y-yori×1width 0

0 1height

(2)

其中width為背景矩形的寬,height為背景矩形的高。xori、yori為背景座標系的原點座標值。

計算好邊界曲線上的控制點後就可以確定裁剪曲線的繪製資料,邊界曲線上的控制點權重不變。

5 繪製流程

根據以上分析,可以採用以下的繪製流程來繪製一個平面圖形:①確定背景矩形;②確定背景座標系;③求出圖形邊界曲線的控制點的絕對座標及權重,並求出其在背景座標系上的座標;④按照OpenGL控制點的表示方法構造顯示資料;⑤呼叫NURBS曲面繪製函式繪製背景矩形;⑥呼叫NURBS曲面裁剪函式對繪製的背景矩形進行裁剪,生成平面幾何圖形。

6 程式例項

為了檢測這種方法的有效性,選取了如圖1所示的圖形,該圖形包含直線邊界和圓弧邊界,而且有一個內部的孔。

按照本文的方法,在Dev-C++軟體中,結合C++程式設計語言,繪製出結果如圖 2所示的圖形。

可以看出用這種方法可以完整精確地繪製出所需的圖形。

7 結語

通過對xoy平面上的複雜邊界圖形的分析,利用OpenGL的曲面繪製及曲面裁剪功能,提出了一種可以方便繪製平面圖形的方法,按照這種思路,可以推廣應用到任意平面上的平面圖形繪製中,只需建立對應的平面座標系即可。