【OpenGL】十、OpenGL 绘制点 ( 初始化 OpenGL 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )
文章目錄
- 一、初始化 OpenGL 矩陣
- 1、設置投影矩陣
- 2、設置模型視圖矩陣
- 二、繪制點
- 1、清除緩沖區(qū)
- 2、設置當前顏色值
- 3、設置繪制點的大小
- 4、繪制點
- 5、將緩沖區(qū)繪制到前臺
- 三、部分代碼示例
- 四、運行效果展示
- 五、相關資源
上一篇博客 【OpenGL】九、OpenGL 繪制基礎 ( OpenGL 狀態(tài)機概念 | OpenGL 矩陣概念 ) 簡單介紹 OpenGL 中的一些理論概念 ; 本篇博客開始使用 OpenGL 繪制 點 ;
一、初始化 OpenGL 矩陣
OpenGL 矩陣環(huán)境初始化 , 主要是 投影 ( Projection ) 矩陣 和 模型視圖 ( ModelView ) 矩陣 ;
1、設置投影矩陣
設置 投影 ( Projection ) 矩陣 : 首先要選中投影矩陣 , 告知 GPU 當前要操作的矩陣是投影矩陣 , 然后再進行設置 ; 通過調用 gluPerspective 方法設置投影矩陣參數(shù) , 其四個參數(shù)的含義分別是 :
- 參數(shù)一 ( GLdouble fovy ) : 攝像機的視口角度
- 參數(shù)二 ( GLdouble aspect ) : 窗口的寬高比
- 參數(shù)三 ( GLdouble zNear ) : 可視的最近的距離
- 參數(shù)四 ( GLdouble zFar ) : 可視的最遠距離
設置投影矩陣代碼示例 :
// 矩陣環(huán)境初始化 , 主要是投影矩陣和模型矩陣 // ( 選中投影矩陣 ) 設置矩陣模式 , 告知 GPU 當前要操作的矩陣是投影矩陣glMatrixMode(GL_PROJECTION);// ( 給投影矩陣設置值 ) 向投影矩陣設置參數(shù)// 參數(shù)一 : 50.0f 是攝像機的視口角度// 參數(shù)二 : 800.0f / 600.0f 是窗口的寬高比// 參數(shù)三 : 0.1f , 可視的最近的距離// 參數(shù)四 : 1000.0f , 可視的最遠距離gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);攝像機的視口角度就是下面的 可視角度 , 視口角度越大 , 可視范圍越大 ;
空間中只有處于下面 椎體范圍內的物體 , 才能被轉到視口中 , 最終 投影到屏幕中顯示 , 處于椎體外部的空間無法顯示 ;
設置的 參數(shù)三 就是 近平面的距離 near , 參數(shù)四 就是 遠平面距離 far ,
角度 + 近平面 + 遠平面 確定了一片三維空間 , 這個空間中就是要在屏幕中顯示的空間 ;
2、設置模型視圖矩陣
設置 模型視圖 ( ModelView ) 矩陣 : 首先選中 模型視圖 ( ModelView ) 矩陣 , 然后進行設置 , 下面的代碼中設置的是一個 單位陣 ;
// 上述設置好了攝像機的參數(shù) , 具體的攝像機能看什么東西 , 就需要模型視圖矩陣設置// ( 選中模型矩陣 )glMatrixMode(GL_MODELVIEW);// ( 設置模型矩陣值 ) , 這里設置的是單位矩陣glLoadIdentity();設置矩陣的套路就是 , 先選中指定的矩陣 , 然后再設置該矩陣 ;
二、繪制點
繪制點的操作需要以下幾步 , ① 清除緩沖區(qū) , ② 設置當前的顏色 , ③ 設置當前繪制的點的大小 , ④ 開始繪制點 , ⑤ 將緩沖區(qū)繪制到前臺 ;
1、清除緩沖區(qū)
每次渲染場景前 , 都需要清除緩沖區(qū) ;
OpenGL 繪制時 , 如果設置幀率為 60 FPS , 每秒中繪制 60 次 , 每次繪制都需要 以 清除緩沖區(qū)開始 , 以將緩沖區(qū)繪制到前臺結束 ;
清除緩沖區(qū)示例代碼 : 清除緩沖區(qū)會在界面中繪制背景顏色 , 該顏色就是之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色 , 該 清除顏色 值也是屬于 OpenGL 狀態(tài)機中的值 ;
// 清除緩沖區(qū) , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區(qū)// 紅色背景glClear(GL_COLOR_BUFFER_BIT);更多細節(jié)參考 【OpenGL】八、初始化 OpenGL 渲染環(huán)境 ( 導入 OpenGL 頭文件 | 鏈接 OpenGL 庫 | 將窗口設置為 OpenGL 窗口 | 設置像素格式描述符 | 渲染繪制 ) ★ 博客 ;
2、設置當前顏色值
設置當前的繪制顏色 : 調用 glColor4ub 函數(shù)設置當前繪制顏色 , 傳入的參數(shù)是 4 個 unsigned byte 類型的值 ;
四個參數(shù)分別是 R 紅色 G 綠色 B 藍色 A 透明度 , 每個顏色分量占 1 字節(jié) , 取值范圍 0 ~ 255 ;
代碼示例 :
// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節(jié)// 參數(shù)數(shù)據(jù)是 R 紅色 G 綠色 B 藍色 A 透明度// 下面設置的含義是白色, 繪制點的時候, 每次都使用白色繪制glColor4ub(255, 255, 255, 255);3、設置繪制點的大小
設置繪制點的大小 , 這里設置的是 20 像素 ;
// 設置繪制點的大小 20 像素glPointSize(20.0f);4、繪制點
繪制點時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來 , 可以調用 glVertex3f 方法設置點 ;
設置了幾個點 , 就會繪制幾個點 , 如下代碼中設置了一個點 , 那么就只繪制這一個點 ;
// 繪制點時, 會將從 glBegin 到 glEnd 之間的所有的點都繪制出來// 可以調用 glVertex3f 方法設置多個點// 繪制點開始glBegin(GL_POINTS);// 設置繪制點的位置glVertex3f(0.0f, 0.0f, -0.5f);// 繪制點結束glEnd();5、將緩沖區(qū)繪制到前臺
上述的操作都是緩沖區(qū)繪制操作 , 繪制完畢后 , 再調用 SwapBuffers 方法 , 正式將緩沖區(qū)繪制到屏幕上 ;
// 將后緩沖區(qū)繪制到前臺SwapBuffers(dc);三、部分代碼示例
這里只展示部分代碼 , 完整代碼可以到 博客源碼快照 中查看 , 已上傳 CSDN 資源 , 關注即可下載 ;
初始化 OpenGL 相關代碼 :
// 創(chuàng)建 OpenGL 的渲染上下文// 獲取窗口設備 dc = GetDC(hWnd);// 顏色描述符, 像素格式描述符 , 選取 OpenGL 渲染的像素格式PIXELFORMATDESCRIPTOR pfd;// 將 PIXELFORMATDESCRIPTOR 結構體清空memset(&pfd, 0, sizeof(PIXELFORMATDESCRIPTOR));// 填充結構體// 設置版本號pfd.nVersion = 1;// 結構體大小pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);// 顏色緩沖區(qū) 32 位pfd.cColorBits = 32;// 深度緩沖區(qū) 24 位pfd.cDepthBits = 24;pfd.cStencilBits = 8;// 顏色格式pfd.iPixelType = PFD_TYPE_RGBA;pfd.iLayerType = PFD_MAIN_PLANE;// 分別設置 繪制到桌面窗口 , OpenGL 支持 , 雙緩沖 標志位 // 雙緩沖區(qū)可以讓畫面更流暢 pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;// 選擇像素格式 , 如果返回 -1 , 說明選擇像素格式失敗 , 一般情況下該選擇是成功的 int pixelFormat = ChoosePixelFormat(dc, &pfd);// 設置像素格式SetPixelFormat(dc, pixelFormat, &pfd);// 創(chuàng)建 OpenGL 上下文對象 , 注意該操作必須在設置完像素格式后進行操作HGLRC rc = wglCreateContext(dc);// 設置 OpenGL 上下文對象 , 將 rc 和 dc 作為當前的渲染設備wglMakeCurrent(dc, rc); // 設置清除緩沖區(qū)背景顏色// glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)// 對應的參數(shù)是 紅色 , 綠色 , 藍色 , 透明度// 這里設置的是紅色glClearColor(1.0, 0.0, 0.0, 1.0);// 矩陣環(huán)境初始化 , 主要是投影矩陣和模型矩陣 // ( 選中投影矩陣 ) 設置矩陣模式 , 告知 GPU 當前要操作的矩陣是投影矩陣glMatrixMode(GL_PROJECTION);// ( 給投影矩陣設置值 ) 向投影矩陣設置參數(shù)// 參數(shù)一 : 50.0f 是攝像機的視口角度// 參數(shù)二 : 800.0f / 600.0f 是窗口的寬高比// 參數(shù)三 : 0.1f , 可視的最近的距離// 參數(shù)四 : 1000.0f , 可視的最遠距離gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);// 上述設置好了攝像機的參數(shù) , 具體的攝像機能看什么東西 , 就需要模型視圖矩陣設置// ( 選中模型矩陣 )glMatrixMode(GL_MODELVIEW);// ( 設置模型矩陣值 ) , 這里設置的是單位矩陣glLoadIdentity();OpenGL 繪制相關代碼 :
// 渲染場景// 清除緩沖區(qū) , // 使用之前設置的 glClearColor(1.0, 0.0, 0.0, 1.0) 擦除顏色緩沖區(qū)// 紅色背景glClear(GL_COLOR_BUFFER_BIT);// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節(jié)// 參數(shù)數(shù)據(jù)是 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();// 將后緩沖區(qū)繪制到前臺SwapBuffers(dc);四、運行效果展示
設置的清除緩沖區(qū)背景顏色是紅色 , 因此整體背景顯示的是紅色 ,
// 設置清除緩沖區(qū)背景顏色// glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)// 對應的參數(shù)是 紅色 , 綠色 , 藍色 , 透明度// 這里設置的是紅色glClearColor(1.0, 0.0, 0.0, 1.0);設置的 當前繪制顏色 是白色 , 設置當前繪制點的大小 20 像素 , 繪制的效果就是一個 20 像素的點 ;
// 設置當前的繪制顏色 , 4 個 unsigned byte // 每個顏色的分量占一個字節(jié)// 參數(shù)數(shù)據(jù)是 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 矩阵 | 设置投影矩阵 | 设置模型视图矩阵 | 绘制点 | 清除缓冲区 | 设置当前颜色值 | 设置点大小 | 绘制点 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenGL】九、OpenGL 绘制基
- 下一篇: 【OpenGL】十一、OpenGL 绘制