【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )
文章目錄
- 一、OpenGL 狀態機概念
- 二、OpenGL 矩陣概念
上一篇博客 【OpenGL】八、初始化 OpenGL 渲染環境 ( 導入 OpenGL 頭文件 | 鏈接 OpenGL 庫 | 將窗口設置為 OpenGL 窗口 | 設置像素格式描述符 | 渲染繪制 ) ★ 進行了 OpenGL 渲染環境初始化 ;
本篇博客簡單介紹 OpenGL 中的一些理論概念 ;
一、OpenGL 狀態機概念
OpenGL 是一個狀態機 , 其中包含了很多狀態 , 簡單列舉下面的幾項 :
OpenGL 中的 矩陣 Matrix , 包含了 投影 ( Projection ) 矩陣 , 模型 ( Model View ) 矩陣 ,
當前的顏色 Color ,
當前的清除緩沖區顏色 ClearColor ,
點的大小 PointSize ,
線寬度 LineWidth ,
光照 Light
?\ \ \ \ \ \ \vdots???????
當使用 OpenGL 繪制 3D 圖形時 , 就會讀取當前的狀態機參數 , 利用這些狀態機進行繪制 , 而我們就在繪制之前設置上述一系列的狀態機 , 確保 OpenGL 繪制按照我們設想的進行 ;
在上一篇博客 【OpenGL】八、初始化 OpenGL 渲染環境 ( 導入 OpenGL 頭文件 | 鏈接 OpenGL 庫 | 將窗口設置為 OpenGL 窗口 | 設置像素格式描述符 | 渲染繪制 ) ★ 中Windows 窗口創建完成后 , 初始化 OpenGL 渲染環境 , 調用 wglCreateContext 方法創建了 OpenGL 上下文對象 HGLRC rc 后 , 此時上述的 狀態機都是默認的 , 進行相關繪制前 , 都需要 逐個設置相關狀態機的值 ; 初始化狀態機操作如下 :
設置清除緩沖區顏色 :
// 設置清除緩沖區背景顏色// glClearColor (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha)// 對應的參數是 紅色 , 綠色 , 藍色 , 透明度// 這里設置的是紅色glClearColor(1.0, 0.0, 0.0, 1.0);初始化矩陣 :
// 矩陣環境初始化 , 主要是投影矩陣和模型矩陣 // ( 選中投影矩陣 ) 設置矩陣模式 , 告知 GPU 當前要操作的矩陣是投影矩陣glMatrixMode(GL_PROJECTION);// ( 給投影矩陣設置值 ) 向投影矩陣設置參數gluPerspective(50.0f, 800.0f / 600.0f, 0.1f, 1000.0f);// ( 選中模型矩陣 )glMatrixMode(GL_MODELVIEW);glLoadIdentity();當前顏色值設置 : 繪制元素前 , 將當前的顏色值設為一個值 , 如 白色 , 開始繪制后 , 就會自動使用該顏色進行繪制 ;
稍后會使用 OpenGL 在桌面窗口中繪制一個點 , 繪制前將當前顏色設置為白色 , 然后繪制的點的顏色就是白色 ;
如果想要繪制不同顏色的點 , 就需要在每次繪制前 , 都修改當前顏色值 ;
整個 OpenGL 只有一個當前顏色值 ;
二、OpenGL 矩陣概念
OpenGL 中的 矩陣 Matrix , 包含了 投影 ( Projection ) 矩陣 , 模型 ( Model View ) 矩陣 ,
繪制的 點 定義在 世界坐標系 下 , 是一個三維的點 , 該三維的點需要將其顯示到二維屏幕上 ;
模型視口 ( ModelView ) 矩陣 的作用就是將上述 世界坐標系中的三維坐標點 , 放到 視口中 , 視口坐標系是攝像機下的可見范圍 ;
攝像機位置 :
右手坐標系 : x 指向屏幕右側 , y 指向屏幕上方 , z 穿過屏幕指向你 ;
攝像機默認放在上述 右手坐標系 原點 , 指向 z 的負方向 , 即看屏幕里面的方向 ;
因此繪制的時候 , 如果使攝像機在默認位置時 , 需要將要繪制的模型放在 z 的負方向上 , 如下代碼是繪制坐標點的代碼 :
// 設置繪制點的位置glVertex3f(0.0f, 0.0f, -0.5f);其繪制位置是 右手坐標系的 屏幕后面 -0.5f 的位置 , 這樣正好暴露在攝像機下 ;
投影 ( Projection ) 矩陣 的作用是將 視口 中的模型 , 投影到二維屏幕 ( 顯示器 ) 上 ;
總結
以上是生活随笔為你收集整理的【OpenGL】九、OpenGL 绘制基础 ( OpenGL 状态机概念 | OpenGL 矩阵概念 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【OpenGL】八、初始化 OpenGL
- 下一篇: 【OpenGL】十、OpenGL 绘制点