Delphi下OpenGL2d繪圖(03)-畫線

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   color   

一、前言

畫線與畫點基本上代碼是相同。區別在於glBegin()的參數。繪製的架構代碼可以使用 Delphi下OpenGL2d繪圖(01)-初始化 中的代碼。修改的部份為 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(255, 0, 0);  // 繪製起點  glVertex2f(50, 50);  // 設定末點線的顏色  glColor3f(0, 0, 255);  // 繪畫末點  glVertex2f(200, 200);  glEnd;  // 兩點間同顏色  glShadeModel(GL_FLAT);  glBegin(GL_LINES);  glColor3f(0, 255, 0);  glVertex2f(200, 50);  glColor3f(255, 255, 0);  glVertex2f(50, 200);  glEnd;  // ----------- GL_LINE_LOOP -----------  // 三個點閉環形成一個三角形  glShadeModel(GL_SMOOTH); 不起作用  glLineWidth(1);  glBegin(GL_LINE_LOOP);  glColor3f(0, 0, 255);  glVertex2f(250, 50);  glVertex2f(250, 200);  glVertex2f(280, 150);  glEnd;  // ----------- GL_LINE_STRIP -----------  // 多點折線    glShadeModel(GL_SMOOTH); 不起作用  glLineWidth(1);  glBegin(GL_LINE_STRIP);  glColor3f(255, 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); //關閉

使用後發現消除鋸齒效果不明顯。又是我的問題?以後再研究。

 

2014-06-26 by lin

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.