日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

用OpenGL画线

發(fā)布時間:2023/12/31 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 用OpenGL画线 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

. 兩點(diǎn)之間的連線稱之為線段,在屏幕上顯示線段放在現(xiàn)在已經(jīng)不是稀奇的事情,大多數(shù)高級圖形API都可以輕松實(shí)現(xiàn),我嘗試用OpenGL畫線,在這里記錄一下收獲.

.?。希穑澹睿牵踢@個級別的圖形API,通常會提供一些繪制基本圖形的接口,這些基本圖形稱之為圖元,而OpenGL提供了點(diǎn),線段,三角形三種圖元繪制接口,說出來你可能不信,OpenGL就只能繪制這三種圖形,本篇博文的主題是畫線,OpenGL能直接繪制的圖元之一.


用OpenGL繪制線段圖元

給出兩點(diǎn)的坐標(biāo),調(diào)用API即可直接畫出線段.

//  偽代碼
glVertex(x0, y0);           //  點(diǎn)A
glVertex(x1, y1);           //  點(diǎn)B
glDrawPrimitive(GL_LINES);  //  繪制線段圖元

如果執(zhí)行正確,你可以看到一條線段.

OpenGL同時還提供調(diào)整線段寬度和顏色的接口.

//  偽代碼
glLineWidth(width)          //  寬度
glLineColor(r, g, b, a)     //  顏色
glVertex(x0, y0);           //  點(diǎn)A
glVertex(x1, y1);           //  點(diǎn)B
glDrawPrimitive(GL_LINES);  //  繪制線段圖元

如果這篇博文有讀者,如果恰好你就是這篇博文的讀者,看到這里,你大概已經(jīng)被OpenGL的威力震懾住了,冷靜一下,接著往下看.

很多時候,我們想要繪制連續(xù)的線段,OpenGL可以輕松搞定這個問題,你只需要重復(fù)上述代碼就可以了.

//  偽代碼
glLineWidth(width)          //  寬度
glLineColor(r, g, b, a)     //  顏色
glVertex(x0, y0);           //  第一條線段點(diǎn)A
glVertex(x1, y1);           //  第一條線段點(diǎn)B
glVertex(x2, y2);           //  第二條線段點(diǎn)A
glVertex(x3, y3);           //  第二條線段點(diǎn)B
glDrawPrimitive(GL_LINES);  //  繪制線段圖元

只需要短短幾行代碼,就可以畫出兩條線段,在驚嘆之余,你可能沒有發(fā)現(xiàn),在兩條線段交接處,很明顯缺掉了一塊,這是因?yàn)槔L制的線段寬度是3像素,而且OpenGL繪制的線段是直角,實(shí)際上上圖是兩個首尾相連的長方形,通過下面的圖能清晰的看出問題所在.

很容易想象,線越寬,線段交接處的缺口越大,大多數(shù)人都接受不了這種缺陷,同時大多數(shù)人都認(rèn)為它不是個問題,如果這篇博文有觀眾,且恰好就是你,你肯定有同感,但事實(shí)上,你猜的沒錯,因?yàn)椋希穑澹睿牵淘诶L制線段圖元的設(shè)計(jì)上就沒考慮過這個問題,所以按上述思路去畫線,這個問題無解,無解的問題就不是問題,所以這的確不是個問題.


用三角形圖元來繪制線段

. 很多新人經(jīng)常會被線段圖元迷惑,誤以為OpenGL畫線就的用它,實(shí)際上OpenGL對線段圖元提供的接口非常有限,即便如此,它還是有能發(fā)揮特長的使用場景,但本文所描述的場景它并不適合.

. 要解決"缺口"的問題,得換一種思路,先生成線段的網(wǎng)格,再填充網(wǎng)格,這樣靈活度就高多了.

從上圖可以看出,線段的交接處看起來沒有那么突兀了.

此外,因?yàn)榫€段是用網(wǎng)格填充的,所以我們可以隨心所欲的修改網(wǎng)格,以及通過可編程管線調(diào)整它.


基于上述內(nèi)容畫的一些線段

閃電

曲線

總結(jié)

以上是生活随笔為你收集整理的用OpenGL画线的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。