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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )

發布時間:2025/6/17 编程问答 36 豆豆

文章目錄

  • 一、初始化 OpenGL 矩陣
    • 1、設置投影矩陣
    • 2、設置模型視圖矩陣
  • 二、繪制點
    • 1、清除緩沖區
    • 2、設置當前顏色值
    • 3、設置繪制點的大小
    • 4、繪制點
    • 5、將緩沖區繪制到前臺
  • 三、部分代碼示例
  • 四、運行效果展示
  • 五、相關資源



上一篇博客 【OpenGL】九、OpenGL 繪制基礎 ( OpenGL 狀態機概念 | OpenGL 矩陣概念 ) 簡單介紹 OpenGL 中的一些理論概念 ; 本篇博客開始使用 OpenGL 繪制 點 ;





一、初始化 OpenGL 矩陣



OpenGL 矩陣環境初始化 , 主要是 投影 ( Projection ) 矩陣模型視圖 ( ModelView ) 矩陣 ;




1、設置投影矩陣


設置 投影 ( Projection ) 矩陣 : 首先要選中投影矩陣 , 告知 GPU 當前要操作的矩陣是投影矩陣 , 然后再進行設置 ; 通過調用 gluPerspective 方法設置投影矩陣參數 , 其四個參數的含義分別是 :

  • 參數一 ( GLdouble fovy ) : 攝像機的視口角度
  • 參數二 ( GLdouble aspect ) : 窗口的寬高比
  • 參數三 ( GLdouble zNear ) : 可視的最近的距離
  • 參數四 ( GLdouble zFar ) : 可視的最遠距離
void APIENTRY gluPerspective (GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar);

設置投影矩陣代碼示例 :

// 矩陣環境初始化 , 主要是投影矩陣和模型矩陣 // ( 選中投影矩陣 ) 設置矩陣模式 , 告知 GPU 當前要操作的矩陣是投影矩陣glMatrixMode(GL_PROJECTION);// ( 給投影矩陣設置值 ) 向投影矩陣設置參數// 參數一 : 50.0f 是攝像機的視口角度// 參數二 : 800.0f / 600.0f 是窗口的寬高比// 參數三 : 0.1f , 可視的最近的距離// 參數四 : 1000.0f , 可視的最遠距離gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);

攝像機的視口角度就是下面的 可視角度 , 視口角度越大 , 可視范圍越大 ;

空間中只有處于下面 椎體范圍內的物體 , 才能被轉到視口中 , 最終 投影到屏幕中顯示 , 處于椎體外部的空間無法顯示 ;

設置的 參數三 就是 近平面的距離 near , 參數四 就是 遠平面距離 far ,

角度 + 近平面 + 遠平面 確定了一片三維空間 , 這個空間中就是要在屏幕中顯示的空間 ;



2、設置模型視圖矩陣


設置 模型視圖 ( ModelView ) 矩陣 : 首先選中 模型視圖 ( ModelView ) 矩陣 , 然后進行設置 , 下面的代碼中設置的是一個 單位陣 ;

// 上述設置好了攝像機的參數 , 具體的攝像機能看什么東西 , 就需要模型視圖矩陣設置// ( 選中模型矩陣 )glMatrixMode(GL_MODELVIEW);// ( 設置模型矩陣值 ) , 這里設置的是單位矩陣glLoadIdentity();

設置矩陣的套路就是 , 先選中指定的矩陣 , 然后再設置該矩陣 ;





二、繪制點



繪制點的操作需要以下幾步 , ① 清除緩沖區 , ② 設置當前的顏色 , ③ 設置當前繪制的點的大小 , ④ 開始繪制點 , ⑤ 將緩沖區繪制到前臺 ;



1、清除緩沖區


每次渲染場景前 , 都需要清除緩沖區 ;

OpenGL 繪制時 , 如果設置幀率為 60 FPS , 每秒中繪制 60 次 , 每次繪制都需要 以 清除緩沖區開始 , 以將緩沖區繪制到前臺結束 ;

清除緩沖區示例代碼 : 清除緩沖區會在界面中繪制背景顏色 , 該顏色就是之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色 , 該 清除顏色 值也是屬于 OpenGL 狀態機中的值 ;

// 清除緩沖區 , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區// 紅色背景glClear(GL_COLOR_BUFFER_BIT);

更多細節參考 【OpenGL】八、初始化 OpenGL 渲染環境 ( 導入 OpenGL 頭文件 | 鏈接 OpenGL 庫 | 將窗口設置為 OpenGL 窗口 | 設置像素格式描述符 | 渲染繪制 ) ★ 博客 ;



2、設置當前顏色值


設置當前的繪制顏色 : 調用 glColor4ub 函數設置當前繪制顏色 , 傳入的參數是 4 個 unsigned byte 類型的值 ;

四個參數分別是 R 紅色 G 綠色 B 藍色 A 透明度 , 每個顏色分量占 1 字節 , 取值范圍 0 ~ 255 ;

代碼示例 :

// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);

3、設置繪制點的大小


設置繪制點的大小 , 這里設置的是 20 像素 ;

// 設置繪制點的大小 20 像素glPointSize(20.0f);

4、繪制點


繪制點時, 會將從 glBeginglEnd 之間的所有的點都繪制出來 , 可以調用 glVertex3f 方法設置點 ;

設置了幾個點 , 就會繪制幾個點 , 如下代碼中設置了一個點 , 那么就只繪制這一個點 ;

// 繪制點時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法設置多個點// 繪制點開始glBegin(GL_POINTS);// 設置繪制點的位置glVertex3f(0.0f, 0.0f, -0.5f);// 繪制點結束glEnd();

5、將緩沖區繪制到前臺


上述的操作都是緩沖區繪制操作 , 繪制完畢后 , 再調用 SwapBuffers 方法 , 正式將緩沖區繪制到屏幕上 ;

// 將后緩沖區繪制到前臺SwapBuffers(dc);



三、部分代碼示例



這里只展示部分代碼 , 完整代碼可以到 博客源碼快照 中查看 , 已上傳 CSDN 資源 , 關注即可下載 ;

初始化 OpenGL 相關代碼 :

// 創建 OpenGL 的渲染上下文// 獲取窗口設備 dc = GetDC(hWnd);// 顏色描述符, 像素格式描述符 , 選取 OpenGL 渲染的像素格式PIXELFORMATDESCRIPTOR pfd;// 將 PIXELFORMATDESCRIPTOR 結構體清空memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));// 填充結構體// 設置版本號pfd.nVersion = 1;// 結構體大小pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);// 顏色緩沖區 32 位pfd.cColorBits = 32;// 深度緩沖區 24 位pfd.cDepthBits = 24;pfd.cStencilBits = 8;// 顏色格式pfd.iPixelType = PFD_TYPE_RGBA;pfd.iLayerType = PFD_MAIN_PLANE;// 分別設置 繪制到桌面窗口 , OpenGL 支持 , 雙緩沖 標志位 // 雙緩沖區可以讓畫面更流暢 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;// 選擇像素格式 , 如果返回 -1 , 說明選擇像素格式失敗 , 一般情況下該選擇是成功的 int pixelFormat = ChoosePixelFormat(dc, &pfd);// 設置像素格式SetPixelFormat(dc, pixelFormat, &pfd);// 創建 OpenGL 上下文對象 , 注意該操作必須在設置完像素格式后進行操作HGLRC rc = wglCreateContext(dc);// 設置 OpenGL 上下文對象 , 將 rc 和 dc 作為當前的渲染設備wglMakeCurrent(dc, rc); // 設置清除緩沖區背景顏色// glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)// 對應的參數是 紅色 , 綠色 , 藍色 , 透明度// 這里設置的是紅色glClearColor(1.0, 0.0, 0.0, 1.0);// 矩陣環境初始化 , 主要是投影矩陣和模型矩陣 // ( 選中投影矩陣 ) 設置矩陣模式 , 告知 GPU 當前要操作的矩陣是投影矩陣glMatrixMode(GL_PROJECTION);// ( 給投影矩陣設置值 ) 向投影矩陣設置參數// 參數一 : 50.0f 是攝像機的視口角度// 參數二 : 800.0f / 600.0f 是窗口的寬高比// 參數三 : 0.1f , 可視的最近的距離// 參數四 : 1000.0f , 可視的最遠距離gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);// 上述設置好了攝像機的參數 , 具體的攝像機能看什么東西 , 就需要模型視圖矩陣設置// ( 選中模型矩陣 )glMatrixMode(GL_MODELVIEW);// ( 設置模型矩陣值 ) , 這里設置的是單位矩陣glLoadIdentity();

OpenGL 繪制相關代碼 :

// 渲染場景// 清除緩沖區 , // 使用之前設置的 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);// 設置繪制點的大小 20 像素glPointSize(20.0f);// 繪制點時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法設置多個點// 繪制點開始glBegin(GL_POINTS);// 設置繪制點的位置glVertex3f(0.0f, 0.0f, -0.5f);// 繪制點結束glEnd();// 將后緩沖區繪制到前臺SwapBuffers(dc);



四、運行效果展示



設置的清除緩沖區背景顏色是紅色 , 因此整體背景顯示的是紅色 ,

// 設置清除緩沖區背景顏色// glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)// 對應的參數是 紅色 , 綠色 , 藍色 , 透明度// 這里設置的是紅色glClearColor(1.0, 0.0, 0.0, 1.0);

設置的 當前繪制顏色 是白色 , 設置當前繪制點的大小 20 像素 , 繪制的效果就是一個 20 像素的點 ;

// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節// 參數數據是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);// 設置繪制點的大小 20 像素glPointSize(20.0f);





五、相關資源



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

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

總結

以上是生活随笔為你收集整理的【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )的全部內容,希望文章能夠幫你解決所遇到的問題。

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