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

2021-05-10 21:59:10 字數 2065 閱讀 9135

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

void gllinestipple(

glint

factor

,

glushort

pattern

);

其中

factor

factor為3

,那麼線型模式中的每一位要重複

3次,然後在繼續下一位。

factor

的取值範圍是

[1, 256]

,預設值是1。

pattern

是乙個16

位的整數,它表示線型模式,當某一位為

0時,表示不畫線,為

1時畫線,但是處理是從最底位開始的,顏色為當前顏色。預設值為

0xffff

,即連續線。

例如pattern

為0x40ff

時,表示的畫線如下圖

10-3

所示。

禁用和啟用線型模式設定可以使用glenable(gl_line_stipple) 和gldisable(

gl_line_stipple),

當禁用線型模式時,使用gllinestipple設定的直線均按照連續線處理,這也是opengl的預設處理。

下面我們來舉例說明常用的幾種直線線型的構造和使用。

bool bantialiasing = false;//

是否進行反走樣處理

bool bantipress = false;//

是否按了f1鍵

void line3f(glfloat, glfloat, glfloat, glfloat, glfloat, glfloat);

int patternmode = 0;//

線型模式

int pattern=//

定義了6種線型;

為了更換各種線型,增加了按鍵選擇,**在wndproc()裡面。

lresult callback wndproc(hwnd hwnd, uint message, wparam wparam, lparam lparam)

else

return 0;

}//

監視視窗啟用訊息

case wm_size:

case wm_keydown:

switch(wparam)

break;

case wm_destroy:

postquitmessage(0);

break;

default:

return defwindowproc(hwnd, message, wparam, lparam); }

return 0; }

glinit()基本沒有特殊的處理,下面是glmain()的具體實現。

void glmain()

else if(!bantialiasing && bantipress)

//縮放因子為2,看起來效果明顯一些

gllinestipple(2, pattern[patternmode]);

for(alpha = 0; alpha<360; alpha+=10)

angle+=0.5;

swapbuffers(g_hdc); }

其中line3f是乙個自定義函式,其功能就是繪製一條三維直線。

void line3f(glfloat fromx, glfloat fromy, glfloat fromz,

glfloat tox, glfloat toy, glfloat toz)

程式執行後,可以看到乙個由點線構成的圓柱面圍繞y軸旋轉。按空格鍵後線型改變,不停的按空格鍵,線型將會一直迴圈改變,重複6種線型。按f1鍵後,所有的線型均以反走樣形式出現。效果如圖10-4所示。由於反走樣處理需要額外的資源開銷,反走樣處理後程式的執行速度有所下降。

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

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

OpenGL系統設計 OpenGL擴充套件

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

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

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