Delphi下OpenGL2d繪圖之畫線的方法
一、前言:
Delphi畫線方法與畫點(diǎn)基本上是相同的。區(qū)別在于glBegin()的參數(shù)。繪制的框架代碼可以參考Delphi下OpenGL2d繪圖初始化中的代碼,地址為//www.jb51.net/article/52141.htm。修改的部份為 Draw 函數(shù)的內(nèi)容。
二、畫線步驟:
GL_LINES:把每一個(gè)頂點(diǎn)作為一個(gè)獨(dú)立的線段,頂點(diǎn)2n-1和2n之間共定義了n條線段,總共繪制N/2條線段
GL_LINE_STRIP:繪制從第一個(gè)頂點(diǎn)到最后一個(gè)頂點(diǎn)依次相連的一組線段,第n和n+1個(gè)頂點(diǎn)定義了線段n,總共繪制n-1條線段
GL_LINE_LOOP:繪制從第一個(gè)頂點(diǎn)到最后一個(gè)頂點(diǎn)依次相連的一組線段,然后最后一個(gè)頂點(diǎn)和第一個(gè)頂點(diǎn)相連,第n和n+1個(gè)頂點(diǎn)定義了線段n,總共繪制n條線段
畫線可能用到以下函數(shù):
glLineWidth() 設(shè)置線條寬度
glShadeModel() 設(shè)置顏色過(guò)渡模式
glColor3f() 設(shè)置線條顏色
procedure TForm1.Draw;
begin
// 清空緩沖區(qū)
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
// ----------- GL_LINES -----------
// 設(shè)置線寬
glLineWidth(5);
// 兩點(diǎn)間漸變色
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES); // 畫線
// 設(shè)置起點(diǎn)線的顏色
glColor3f(1, 0, 0);
// 繪制起點(diǎn)
glVertex2f(50, 50);
// 設(shè)置末點(diǎn)線的顏色
glColor3f(0, 0, 1);
// 繪畫末點(diǎn)
glVertex2f(200, 200);
glEnd;
// 兩點(diǎn)間同顏色
glShadeModel(GL_FLAT);
glBegin(GL_LINES);
glColor3f(0, 1, 0);
glVertex2f(200, 50);
glColor3f(1, 1, 0);
glVertex2f(50, 200);
glEnd;
// ----------- GL_LINE_LOOP -----------
// 三個(gè)點(diǎn)閉環(huán)形成一個(gè)三角形 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 -----------
// 多點(diǎn)折線 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); //交換雙緩沖區(qū)內(nèi)容,這將把剛繪制的圖形翻印到屏幕上。
end;
可以看到第一個(gè)X線條顏色漸變的,OpenGL默認(rèn)情況下是這種樣式。opengl中提供了一個(gè)函數(shù)glShadeModel來(lái)決定如何處理這種不同顏色的情況。
glShadeModel(GL_SMOOTH); // 平滑方式,這也是opengl的默認(rèn)處理方式,實(shí)現(xiàn)顏色漸變的效果 glShadeModel(GL_FLAT); // 單色方式,線段的顏色以某一個(gè)頂點(diǎn)的顏色為準(zhǔn),由具體實(shí)現(xiàn)決定。為了避免不確定性,應(yīng)盡量在多邊形中使用同一種顏色
經(jīng)過(guò)測(cè)試后發(fā)現(xiàn),在GL_LINE_LOOP與GL_LINE_STRIP樣式下,漸變效果無(wú)效!具體原因有待進(jìn)一步查明。
另外,OpenGL提供了抗鋸齒的功能,函數(shù)為
glEnable(GL_LINE_SMOOTH); //啟用 glHint(GL_LINE_SMOOTH,GL_NICEST); glDisable(GL_LINE_SMOOTH); //關(guān)閉
使用后發(fā)現(xiàn)抗鋸齒效果不明顯。有待進(jìn)一步繼續(xù)再研究。
完整代碼點(diǎn)此下載
上一篇:Delphi實(shí)現(xiàn)毫秒級(jí)別的倒計(jì)時(shí)實(shí)例代碼
欄 目:Delphi
下一篇:Delphi實(shí)現(xiàn)判斷網(wǎng)址是否存在及是否可以打開的方法
本文標(biāo)題:Delphi下OpenGL2d繪圖之畫線的方法
本文地址:http://mengdiqiu.com.cn/a1/Delphi/8643.html
您可能感興趣的文章
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖文演示無(wú)錯(cuò)
- 01-10delphi建立、讀取、存貯INI文件的方法《三》
- 01-10Delphi Command模式
- 01-10delphi 正弦曲線圖
- 01-10delphi建立、讀取、存貯INI文件的方法《二》
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函數(shù)
- 01-10delphi中一個(gè)值得大家來(lái)考慮的DLL問(wèn)題
- 01-10初探Delphi中的插件編程


閱讀排行
- 1C語(yǔ)言 while語(yǔ)句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語(yǔ)言實(shí)現(xiàn)“百馬百擔(dān)”問(wèn)題方法
- 4C語(yǔ)言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語(yǔ)言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語(yǔ)言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語(yǔ)言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10在Delphi實(shí)現(xiàn)在數(shù)據(jù)庫(kù)中存取圖像的圖
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10delphi 正弦曲線圖
- 01-10Delphi Command模式
- 01-10delphi建立、讀取、存貯INI文件的方法
- 01-10插件管理框架 for Delphi(二)
- 01-10插件管理框架 for Delphi(一)
- 01-10Delphi中判斷文件是否為文本文件的函
- 01-10delphi中一個(gè)值得大家來(lái)考慮的DLL問(wèn)題
- 01-10初探Delphi中的插件編程
隨機(jī)閱讀
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-10delphi制作wav文件的方法
- 01-11ajax實(shí)現(xiàn)頁(yè)面的局部加載
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10使用C語(yǔ)言求解撲克牌的順子及n個(gè)骰子
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文