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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )

發布時間:2025/6/17 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、設置線寬度
  • 二、繪制單條線段 GL_LINES
  • 三、繪制多條線段 GL_LINES
  • 四、繪制依次連接的點組成的線 GL_LINE_STRIP
  • 五、繪制圈 GL_LINE_LOOP ( 偶數個點 )
  • 六、繪制圈 GL_LINE_LOOP ( 奇數個點 )
  • 七、繪制彩色的線
  • 八、相關資源





一、設置線寬度



線的繪制寬度是 OpenGL 狀態機中的一個值 , 通過 glLineWidth 方法設置 ; 下面的代碼將線的寬度設置為 2 像素 ;

// 設置線的寬度 glLineWidth(2.0f);



二、繪制單條線段 GL_LINES



繪制線時, 會將從 glBeginglEnd 之間的所有的點都繪制出來 ;

可以調用 glVertex3f 方法設置成對的點 , 每兩個點代表一條線 ;

注意必須成對設置 , 如果設置 奇數個點 , 最后一個點會被丟棄 ;


繪制線段時 , glBegin(GL_LINES) 方法傳入的參數是 GL_LINES ;

在 glBegin(GL_LINES) 和 glEnd() 之間設置的點 , 會被自動當做線的兩個端點 ;

如在上述 glBegin 和 glEnd 兩個方法之間調用了

glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);

代碼 , 含義是繪制一條線段 , 端點分別是 (0,0,-10) 和 (-5,0,-10) ;


代碼示例 :

// 渲染場景// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置線的寬度 glLineWidth(2.0f);// 繪制線時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法 成對 設置多條線// 注意必須成對設置 , 如果設置奇數個點 , 最后一個點會被丟棄// 繪制線段開始glBegin(GL_LINES);// 繪制線 , 每兩個點組成一條線// glVertex3f (GLfloat x, GLfloat y, GLfloat z)glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);// 上面的設置會從 (0,0,-10) 坐標向 (-5,0,-10) 坐標繪制一條線// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);

繪制效果 :


注意 : 設置的點個數必須是偶數的 , 如果設置奇數個點 , 最后一個點會被舍棄 ;





三、繪制多條線段 GL_LINES



繪制線段時 , glBegin(GL_LINES) 方法傳入的參數是 GL_LINES ;

在 glBegin(GL_LINES) 和 glEnd() 之間設置的點 , 會被自動當做線的兩個端點 , 如果設置 4 個點 , OpenGL 會按照順序 , 從上到下 , 兩兩組合成一條線段 ;

如在上述 glBegin 和 glEnd 兩個方法之間調用了

glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, -2.0f, -10.0f);

代碼 , 含義是 繪制 2 條線段 , 線段 1 端點分別是 (0,0,-10) 和 (-5,0,-10) , 線段 2 端點分別是 (-5,0,-10) 和 (-5, -2, -10) ;

// 渲染場景// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置線的寬度 glLineWidth(2.0f);// 繪制線時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法 成對 設置多條線// 注意必須成對設置 , 如果設置奇數個點 , 最后一個點會被丟棄// 繪制線段開始glBegin(GL_LINES);// 繪制線 , 每兩個點組成一條線// glVertex3f (GLfloat x, GLfloat y, GLfloat z)glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);// 上面的設置會從 (0,0,-10) 坐標向 (-5,0,-10) 坐標繪制一條線glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, -2.0f, -10.0f);// 上面的設置會從 (-5,0,-10) 坐標向 (-5,-2,-10) 坐標繪制一條線// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);

繪制效果 :





四、繪制依次連接的點組成的線 GL_LINE_STRIP



給 glBegin 傳入 GL_LINE_STRIP 參數 , 其作用是繪制各個點依次連接的線 , 但是首尾不連接 ;

這里注意與 GL_LINE_LOOP 區別 , GL_LINE_LOOP 設置后 , 在 GL_LINE_STRIP 基礎上 , 還要進行首尾連接 ;

代碼示例 :

// 渲染場景// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置線的寬度 glLineWidth(2.0f);// 繪制線時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法 成對 設置多條線// 注意必須成對設置 , 如果設置奇數個點 , 最后一個點會被丟棄// 繪制線段開始//glBegin(GL_LINES);//glBegin(GL_LINE_LOOP);glBegin(GL_LINE_STRIP);// 繪制線 , 每兩個點組成一條線// glVertex3f (GLfloat x, GLfloat y, GLfloat z)glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);// 上面的設置會從 (0,0,-10) 坐標向 (-5,0,-10) 坐標繪制一條線glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, -2.0f, -10.0f);// 上面的設置會從 (-5,0,-10) 坐標向 (-5,-2,-10) 坐標繪制一條線// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);

效果展示 :





五、繪制圈 GL_LINE_LOOP ( 偶數個點 )



繪制圈時 , 在 glBegin 中傳入 GL_LINE_LOOP 參數 , 繪制時會將 glBegin 和 glEnd 之間的點連線 , 并且最后一個點會和第一個點連在一起 , 組成一個圈 ;

代碼示例 : 下面的代碼與 三 中的代碼區別是 , glBegin 中傳入的參數是 GL_LINE_LOOP , 不再傳入 GL_LINES 參數 ;

// 渲染場景// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置線的寬度 glLineWidth(2.0f);// 繪制線時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法 成對 設置多條線// 注意必須成對設置 , 如果設置奇數個點 , 最后一個點會被丟棄// 繪制線段開始//glBegin(GL_LINES);glBegin(GL_LINE_LOOP);// 繪制線 , 每兩個點組成一條線// glVertex3f (GLfloat x, GLfloat y, GLfloat z)glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);// 上面的設置會從 (0,0,-10) 坐標向 (-5,0,-10) 坐標繪制一條線glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, -2.0f, -10.0f);// 上面的設置會從 (-5,0,-10) 坐標向 (-5,-2,-10) 坐標繪制一條線// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);

繪制效果 : 最后一個點與第一個點連成線段 , 組成一個閉合的三角形 ;





六、繪制圈 GL_LINE_LOOP ( 奇數個點 )



繪制圈時 , 如果設置奇數個點 , 最后一個點也會進行連線 , 如上面的四個點 , 去掉第三個點 , 也可以畫出一模一樣的圖形 ;

// 渲染場景// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置線的寬度 glLineWidth(2.0f);// 繪制線時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法 成對 設置多條線// 注意必須成對設置 , 如果設置奇數個點 , 最后一個點會被丟棄// 繪制線段開始//glBegin(GL_LINES);glBegin(GL_LINE_LOOP);// 繪制線 , 每兩個點組成一條線// glVertex3f (GLfloat x, GLfloat y, GLfloat z)glVertex3f(0.0f, 0.0f, -10.0f);glVertex3f(-5.0f, 0.0f, -10.0f);// 上面的設置會從 (0,0,-10) 坐標向 (-5,0,-10) 坐標繪制一條線//glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, -2.0f, -10.0f);// 上面的設置會從 (-5,0,-10) 坐標向 (-5,-2,-10) 坐標繪制一條線// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);





七、繪制彩色的線



在上面 六 的代碼基礎上 , 在繪制每個點之前 , 都設置當前的顏色值 , 即 OpenGL 狀態機中的當前顏色值 ,

第一個點 glVertex3f(0.0f, 0.0f, -10.0f) , 繪制前設置的是 白色 ,

第二個點 glVertex3f(-5.0f, 0.0f, -10.0f) , 繪制前設置的是 綠色 ,

第三個點 glVertex3f(-5.0f, -2.0f, -10.0f) , 繪制前設置的是 藍色 ;

設置顏色就是在點設置前調用 glColor4ub(0, 0, 255, 255) 方法 , 設置當前顏色 ;

白色的點綠色的點 之間連線時 , 顏色會從白色漸變到綠色 ;

代碼如下 :

// 渲染場景// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置線的寬度 glLineWidth(2.0f);// 繪制線時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法 成對 設置多條線// 注意必須成對設置 , 如果設置奇數個點 , 最后一個點會被丟棄// 繪制線段開始//glBegin(GL_LINES);//glBegin(GL_LINE_STRIP);glBegin(GL_LINE_LOOP);// 繪制線 , 每兩個點組成一條線// glVertex3f (GLfloat x, GLfloat y, GLfloat z)glVertex3f(0.0f, 0.0f, -10.0f);// 設置綠色 glColor4ub(0, 255, 0, 255);glVertex3f(-5.0f, 0.0f, -10.0f);// 上面的設置會從 (0,0,-10) 坐標向 (-5,0,-10) 坐標繪制一條線// 設置藍色glColor4ub(0, 0, 255, 255);//glVertex3f(-5.0f, 0.0f, -10.0f);glVertex3f(-5.0f, -2.0f, -10.0f);glColor4ub(255, 255, 255, 255);// 上面的設置會從 (-5,0,-10) 坐標向 (-5,-2,-10) 坐標繪制一條線// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);

運行效果如下 :

111 個點白色 , 第 222 個點綠色 , 第 333 個點藍色 ;

線段 111 白色 ~ 綠色漸變 , 線段 222 綠色 ~ 藍色漸變 , 線段 333 藍色 ~ 白色漸變 , 這是 OpenGL 固定管線差值出來的顏色 ;





八、相關資源



GitHub 地址 : https://github.com/han1202012/OpenGL

博客源碼快照 : https://download.csdn.net/download/han1202012/14740988

總結

以上是生活随笔為你收集整理的【OpenGL】十二、OpenGL 绘制线段 ( 绘制单条线段 | 绘制多条线段 | 依次连接的点组成的线 | 绘制圈 | 绘制彩色的线 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。