和曲線類似,曲面也可以通過控制點來模擬。實際上在很多場合也使用多邊形來模擬平滑曲面,但使用控制點需要的計算機系統資源開銷相對要少很多。同時,控制點個數越多,就越能夠逼近真實的曲面,所以選擇好的演算法和適當的控制點個數相當重要。
opengl實現曲面的方法和曲線類似,它使用二維的glmap2和glevalcoord2來代替glmap1和glevalcoord1。同樣,glmap2是設定二維曲面的定義(定義網格的運運算元),glevalcoord2計算具體的座標點。兩個函式的原型如下
void glmap2d(
glenumtarget
,
gldoubleu1,
gldoubleu2,
glintustride
,
glintuorder
,
gldoublev1,
gldoublev2,
glintvstride
,
glintvorder
,
const gldouble*points
);
void glmap2f(
glenumtarget
,
glfloatu1,
glfloatu2,
glintustride
,
glintuorder
,
glfloatv1,
glfloatv2,
glintvstride
,
glintvorder
,
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(
gldoubleu
);
void glevalcoord1f(
glfloatu
);
void glevalcoord2d(
gldoubleu,
gldoublev
);
void glevalcoord2f(
glfloatu,
glfloatv
);
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複雜三維模型 上面在繪製立方體時要乙個面乙個面地繪製,顯得很麻煩。實際...