OpenGL 程式設計/從 1.x 遷移到 2.x
外觀
OpenGL ES 2.0 中大部分 OpenGL 1.x 都不可用,而 OpenGL 3.x 和 OpenGL 4.x 已棄用它們(這些特性仍然可以在“相容性配置檔案”中使用,但可以預期這些特性很快就會消失)。
但是,關於如何在新的版本中替換這些特性,人們很少提及。下面介紹如何操作。
已棄用函式:glIdentity、glRotate、glOrtho、gluOrtho...
矩陣數學運算可以完成以下操作
- 在著色器中使用內建運算子
- 在 C 原始碼中使用額外的庫,例如
GLM 提供 glm::ortho 來替換 glOrtho 和 gluOrtho 以進行正交透視(和 2D 程式設計)。
示例
- 教程 05:立方體旋轉
已棄用函式:glVertex、glTexCoord...
這些資料現在以批處理模式作為 C 陣列傳送。您可以使用
- 直接使用 C 陣列:每幀重新發送資料
- glBufferData:將 C 資料傳送到顯示卡一次,然後引用該緩衝區
您對每個頂點屬性(位置、顏色、紋理座標...)使用 glVertexAttribPointer 一次,將 C 陣列或 OpenGL 緩衝區傳遞給它。
示例
然後您使用 glDrawArrays 或 glDrawElements 開始繪製。
已棄用函式:glNormal、glNormalPointer
法線需要傳遞給著色器(主要是為了進行著色計算),就像向量座標 (glVertexAttribPointer) 一樣。要計算逆時針順序的 3 個頂點 a、b 和 c 的法線,GLM 提供
glm::normalize(glm::cross(b - a, c - a)); glm::fastNormalize(glm::cross(b - a, c - a)); // faster but less accurate
示例
- 教程 08:載入 .obj,動態計算法線
已棄用函式:glMap1、glMap2、glEvalCoord、glEvalPoint...
- GLU ES - http://code.google.com/p/glues/ - 這是針對 OpenGL 1.x 的,因此它可能無法在 2.x 環境中工作,但提供了替換程式碼
- 手動程式碼(並不難)
示例
- 教程 07:茶壺(貝塞爾曲面)
已棄用函式:glLight (glLightfv3 等)、glShadeModel...
壞訊息是您必須在著色器中重新實現所有內容。好訊息是這並不那麼難,而且您可以在下面的示例中找到可以複製貼上的程式碼:)
您還需要將光照引數提供給您的著色器,最好將它們儲存為著色器 struct。
示例
- 漫反射
- 光照教程的其他部分
瀏覽並下載 完整程式碼 