OpenGL支持基本幾何直線繪畫,使用glVertex()生成繪畫相連直線的演示程式如上圖:下載
- 按鼠標左鍵點擊繪畫相連直線
- 按+鍵加大直線寬度
- 按-鍵減小直線寬度
- 按S鍵切換直線抗鋸齒功能
- 按.鍵切換直線點畫模式(虛線)
- 按1鍵切換为白色
- 按2鍵切換为黄色
- 按3鍵切換为红色
- 按4鍵每兩個頂點組成的直線
- 按5鍵由多個頂點組成的相連直線
- 按6鍵由多個頂點組成相連的閉合直線
繪畫直線
- glLineWidth(width);設置直線寬度
- glBegin(GL_LINE_STRIP);準備繪畫連續直線
- glVertex3f(x1,y1,z1);繪畫直線頂點1
- glVertex3f(x2,y2,z2);繪畫直線頂點2
- glEnd();結束繪畫
glBegin()繪畫直線參數 | 簡介 |
GL_LINES | 由兩個頂點組成的直線 |
GL_LINE_STRIP | 由多個頂點組成的相連直線 |
GL_LINE_LOOP | 由多個頂點組成相連的閉合直線,第一個與最後一個頂點自動相連 |
因屏幕由像素組成,直線邊緣會產生鋸齒,OpenGL有抗鋸齒算法,啟用後直線會變得平滑,並修改邊緣像素的顏色:
- glEnable(GL_LINE_SMOOTH);啟用直線的平滑模式(抗鋸齒功能)
- glEnable(GL_BLEND);啟用混合
點畫模式通常用繪畫虛線
void glLineStipple(GLint factor,GLushort pattern);
factor:模板每BIT對應像素量
pattern:由2個Btye組成點畫模板
- glEnable(GL_LINE_STIPPLE);設置點畫模式(虛線)
- glLineStipple(5,0xfafa);設置模板
開啟直線抗鋸齒算法後,直線寬度範圍受到限制,若輸入不受支持直線寬度,會改為最接近的支持數值:
- GLfloat widths[2];浮點數數組
- glGetFloatv(GL_LINE_WIDTH_RANGE, widths);提取直線寬度的範圍
- GLfloat min = widths[0];最小
- GLfloat max = widths[1];最大
- GLfloat granularity;
- glGetFloatv(GL_LINE_WIDTH_GRANULARITY,&granularity);提取直線寬度的粒度
- GLfloat width;
- glGetFloatv(GL_LINE_WIDTH,&width);獲取當前直線寬度
- width = width + granularity;加大
- width = width – granularity;減小
- glPointSize(width);設置當前直線寬度,但不能在glBegin()與glEnd()之間調用
你必須登入才能發表留言。