Delphi下OpenGL2d繪圖之畫線的辦法。本站提示廣大學習愛好者:(Delphi下OpenGL2d繪圖之畫線的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Delphi下OpenGL2d繪圖之畫線的辦法正文
一、前言:
Delphi畫線辦法與畫點根本上是相反的。區別在於glBegin()的參數。繪制的框架代碼可以參考Delphi下OpenGL2d繪圖初始化中的代碼,地址為。修正的部份為 Draw 函數的內容。
二、畫線步驟:
GL_LINES:把每一個頂點作為一個獨立的線段,頂點2n-1和2n之間共定義了n條線段,總共繪制N/2條線段
GL_LINE_STRIP:繪制從第一個頂點到最後一個頂點順次相連的一組線段,第n和n+1個頂點定義了線段n,總共繪制n-1條線段
GL_LINE_LOOP:繪制從第一個頂點到最後一個頂點順次相連的一組線段,然後最後一個頂點和第一個頂點相連,第n和n+1個頂點定義了線段n,總共繪制n條線段
畫線能夠用到以下函數:
glLineWidth() 設置線條寬度
glShadeModel() 設置顏色過渡形式
glColor3f() 設置線條顏色
procedure TForm1.Draw;
begin
// 清空緩沖區
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
// 設置線寬
glLineWidth(5);
// 兩點間突變色
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // 畫線
// 設置終點線的顏色
glColor3f(1, 0, 0);
// 繪制終點
glVertex2f(50, 50);
// 設置末點線的顏色
glColor3f(0, 0, 1);
// 繪畫末點
glVertex2f(200, 200);
glEnd;
// 兩點間同顏色
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// 三個點閉環構成一個三角形 glShadeModel(GL_SMOOTH); 不起作用
glLineWidth(1);
glBegin(GL_LINE_LOOP);
glColor3f(0, 0, 1);
glVertex2f(250, 50);
glVertex2f(250, 200);
glVertex2f(280, 150);
glEnd;
// ----------- GL_LINE_STRIP -----------
// 多點折線 glShadeModel(GL_SMOOTH); 不起作用
glLineWidth(1);
glBegin(GL_LINE_STRIP);
glColor3f(1, 0, 255);
glVertex2f(350, 50);
glVertex2f(400, 200);
glVertex2f(480, 150);
glVertex2f(490, 60);
glEnd;
SwapBuffers(FDC); //交流雙緩沖區內容,這將把剛繪制的圖形翻印到屏幕上。
end;
可以看到第一個X線條顏色突變的,OpenGL默許狀況下是這種款式。opengl中提供了一個函數glShadeModel來決議如何處置這種不同顏色的狀況。
glShadeModel(GL_SMOOTH); // 平滑方式,這也是opengl的默許處置方式,完成顏色突變的效果 glShadeModel(GL_FLAT); // 單色方式,線段的顏色以某一個頂點的顏色為准,由詳細完成決議。為了防止不確定性,應盡量在多邊形中運用同一種顏色
經過測試後發現,在GL_LINE_LOOP與GL_LINE_STRIP款式下,突變效果有效!詳細緣由有待進一步查明。
另外,OpenGL提供了抗鋸齒的功用,函數為
glEnable(GL_LINE_SMOOTH); //啟用 glHint(GL_LINE_SMOOTH,GL_NICEST); glDisable(GL_LINE_SMOOTH); //封閉
運用後發現抗鋸齒效果不分明。有待進一步持續再研討。
完好代碼點此下載