歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenGL ES 繪制 3D 圖形

OpenGL ES 繪制 3D 圖形

日期:2017/3/1 11:18:10   编辑:Linux編程

OpenGL ES是 OpenGL三維圖形API 的子集,針對手機、PDA和游戲主機等嵌入式設備而設計。 Ophone目前支持OpenGL ES 1.0 ,OpenGL ES 1.0 是以 OpenGL 1.3 規范為基礎的,OpenGL ES 1.1 是以 OpenGL 1.5 規范為基礎的。本文主要介紹利用OpenGL ES繪制圖形方面的基本步驟。

本文內容由三部分構成。首先通過EGL獲得OpenGL ES的編程接口;其次介紹構建3D程序的基本概念;最後是一個應用程序示例。

EGL OpenGL ES 本質上是一個圖形渲染管線的狀態機,而 EGL 則是用於監控這些狀態以及維護幀緩沖和其他渲染面的外部層。圖1 是一個典型的 EGL 系統布局圖。EGL 視窗設計是基於人們熟悉的用於 Microsoft Windows ( WGL )和 UNIX ( GLX )上的 OpenGL 的 Native 接口,與後者比較接近。 OpenGL ES 圖形管線的狀態被存儲於 EGL 管理的一個上下文中。幀緩沖和其他繪制渲染面通過 EGL API 創建、管理和銷毀。 EGL 同時也控制和提供了對設備顯示和可能的設備渲染配置的訪問。 圖1 OpenGL ES 需要一個渲染上下文和渲染面。渲染上下文中存儲OpenGL ES的狀態信息,渲染面用於圖元的繪制。編寫OpenGL ES之前需要EGL的操作有:
  • 查詢設備可以支持的顯示句柄,並初始化。
  • 創建渲染面,繪制OpenGL ES圖形。
  • 創建渲染上下文。EGL需要創建OpenGL ES渲染上下文用於關聯到某個渲染面。
Ophone中EGL包括4個類,分別是EGLDisplay:顯示句柄、EGLConfig:配置類;EGLContext:渲染上下文;的類和EGLSurface:可渲染的視圖類。 EGL可以認為成OpenGL ES和本地窗口系統之間的中間層。 本地窗口系統指GNU/Linux上X窗口系統,或者Mac OX X's Quartz等。在EGL確定渲染面的類型前,EGL需要和底層的窗口系統進行通訊。因為在不同的操作系統上的窗口系統的不同,EGL提供一個透明窗口類型,即EGLDisplay。它抽象了各種窗口系統。所以首先要創建、初始化一個EGLDisplay對象。
  1. // EGLContext的靜態方法getEGL獲得EGL實例
  2. EGL10 egl = (EGL10)EGLContext.getEGL();
  3. //創建EGLDisplay, EGL_DEFAULT_DISPLAY獲得缺省的本地窗口系統類型
  4. EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
  5. //初始化EGLDispla的同時獲得版本號
  6. int[] version = new int[2];
  7. egl.eglInitialize(dpy, version);
// EGLContext的靜態方法getEGL獲得EGL實例 EGL10 egl = (EGL10)EGLContext.getEGL(); //創建EGLDisplay, EGL_DEFAULT_DISPLAY獲得缺省的本地窗口系統類型 EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); //初始化EGLDispla的同時獲得版本號 int[] version = new int[2]; egl.eglInitialize(dpy, version);
每個 EGLDisplay 在使用前都需要初始化。初始化 EGLDisplay 的同時能夠得到系統中 EGL 的實現版本號。通過版本號,合理運用相應OpenGL ES API,可以編寫兼容性良好的程序,以適應更多的設備以及提供最大限度的移植性。初始化函數原型:
  1. boolean eglInitialize(EGLDisplay display, int[] major_minor)
Copyright © Linux教程網 All Rights Reserved