OpenGL系統設計 擴充套件建模 6

2021-05-11 03:58:41 字數 2911 閱讀 6473

和曲線類似,曲面也可以通過控制點來模擬。實際上在很多場合也使用多邊形來模擬平滑曲面,但使用控制點需要的計算機系統資源開銷相對要少很多。同時,控制點個數越多,就越能夠逼近真實的曲面,所以選擇好的演算法和適當的控制點個數相當重要。

opengl實現曲面的方法和曲線類似,它使用二維的glmap2和glevalcoord2來代替glmap1和glevalcoord1。同樣,glmap2是設定二維曲面的定義(定義網格的運運算元),glevalcoord2計算具體的座標點。兩個函式的原型如下

void glmap2d(

glenum

target

,

gldoubleu1,

gldoubleu2,

glint

ustride

,

glint

uorder

,

gldoublev1,

gldoublev2,

glint

vstride

,

glint

vorder

,

const gldouble

*points

);

void glmap2f(

glenum

target

,

glfloatu1,

glfloatu2,

glint

ustride

,

glint

uorder

,

glfloatv1,

glfloatv2,

glint

vstride

,

glint

vorder

,

const glfloat

*points

);

target 引數含義和glmap1函式中的一樣,取值也基本相同,只是把其中的gl_map1_*換成gl_map2_*。

u1,u2,v1,v2 含義同glmap1的u1,u2,只是從一維擴充套件到了二維。ustride,vstride相當於glmap1中的stride,uorder,vorder相當於order,points仍然是控制點資料指標。

glevalcoord根據glmap的定義計算擬合過程座標值,其函式原型如下,其中glevalcoord1針對的是一維的曲線,而glevalcoord2針對的是二維曲面。

void glevalcoord1d(

gldouble

u

);

void glevalcoord1f(

glfloat

u

);

void glevalcoord2d(

gldoubleu,

gldouble

v

);

void glevalcoord2f(

glfloatu,

glfloat

v

);

void glevalcoord1dv(

const gldouble *

u

);

void glevalcoord1fv(

const glfloat *

u

);

void glevalcoord2dv(

const gldouble *

u

);

void glevalcoord2fv(

const glfloat *

u

);

其中u,v分別表示介於glmap定義的[u1 ,u2]、[v1,v2]範圍之間的u,v值,計算用於擬合曲線或曲面的座標值。

當函式原型是glevalcoord*v時,表示引數是乙個向量,如果是一維的,則該向量只有乙個值,表示u值,如果是二維的,則表示有兩個值,表示u和v。

bezier曲面是bezier曲線交織而成的曲面,bezier 曲線具有包絡性,即三次bezier 曲線是二次bezier 曲線的簇的包絡。n 次bezier曲面是n-1 次bezier 曲面的包絡。另外,bezier 曲線還具有可分割性。下面我們來通過控制點來實現乙個bezier曲面的繪製。

//先定義20個控制點,u方向5個,v方向4個

glfloat ctrlpoints[4][5][3] =

, ,,

, },

, ,,

, },

, ,,

, },

, ,,

, }};

void glmain()

swapbuffers(g_hdc);

}程式執行效果如圖10-10所示,可以看到乙個馬鞍狀的網格曲面。

OpenGL系統設計 擴充套件建模 3

除了直線的寬度可以根據需要進行改變外,直線的線型也可以改變。gllinestipple就可以提供不同於常規的連續線段的中心線 虛線 點劃線等等。其函式原型如下 void gllinestipple glint factor glushort pattern 其中 factor factor為3 那麼...

OpenGL系統設計 OpenGL擴充套件

和微軟的direct3d directgraphics相比較,opengl的乙個最大的優點是其擴充套件機制。對於顯示卡硬體的新功能,除非微軟發布了directx的新版本,否則,程式設計師是無法使用的。但opengl就不同了,opengl給硬體廠商和程式設計師提供了擴充套件機制,讓硬體廠商增加基於顯示...

OpenGL系統設計 4 三維建模(2)

我們再來利用三角形 四邊形 多邊形製作乙個簡單的小屋,看起來更加逼真一些。小屋由5個四邊形和兩個五邊形組成。牆面的顏色我們可以在畫筆中找到後,得到其rgb值後再使用glcolor3ub來設定。void drawhouse 圖4 2複雜三維模型 上面在繪製立方體時要乙個面乙個面地繪製,顯得很麻煩。實際...