- JOGL 圖形形狀
- JOGL - 繪圖基礎
- JOGL - 使用 GL_Lines 繪圖
- JOGL - 預定義形狀
- JOGL 3D 圖形
- JOGL - 3D 基礎
- JOGL - 3D 三角形
- JOGL - 3D 立方體
- JOGL - 附錄
- JOGL 有用資源
- JOGL - 快速指南
- JOGL - 有用資源
- JOGL - 討論
JOGL - 基本模板的 API
使用 JOGL 程式設計,可以繪製各種圖形形狀,例如直線、三角形、3D 形狀,包括旋轉、光照、顏色等特殊效果。要使用 JOGL 繪製物件,首先必須構建一個基本的 JOGL 框架。下面列出了構建基本框架所需的類。
GLEventListener 介面
要使您的程式能夠使用 JOGL 圖形 API,您需要實現 **GLEventListener** 介面。您可以在 **javax.media.opengl** 包中找到 **GLEventListener** 介面。
下表提供了 **GLEventListener** 介面中各種方法的詳細資訊和描述 -
| 序號 | 方法和描述 |
|---|---|
| 1 | Void display(GLAutoDrawable drawable) 它由 GLAutoDrawable 介面的物件呼叫,以由客戶端啟動 OpenGL 渲染。即,此方法包含使用 OpenGL API 繪製圖形元素的邏輯。 |
| 2 | Void dispose(GLAutoDrawable drawable) 此方法向偵聽器發出訊號,指示其對每個 GLContext 釋放所有 OpenGL 資源,例如記憶體緩衝區和 GLSL 程式。 |
| 3 | Void init(GLAutoDrawble drawable) 它由 GLAutoDrawable 介面的物件在 OpenGL 上下文初始化後立即呼叫。 |
| 4 | Void reshape(GLAutoDrawble drawble, int x, int y, int width, int height) 它由 GLAutoDrawable 介面的物件在元件調整大小後的第一次重繪期間呼叫。當元件在視窗上的位置發生變化時,也會呼叫它。 |
**GLEventListener** 的所有方法都以 **GLAutoDrawable** 介面的物件作為引數。
GLAutoDrawable 介面
此介面提供了一種基於事件的機制 **(GLEventListener)** 用於執行 OpenGL 渲染。**GLAutoDrawable** 自動建立一個主渲染上下文,該上下文與 **GLAutoDrawable** 關聯,並在物件的生命週期記憶體在。
下表提供了 **GLAutoDrawable** 介面中各種方法的詳細資訊和描述 -
| 序號 | 方法和描述 |
|---|---|
| 1 | GL getGL() 返回 GLAutoDrawable 介面的當前物件使用的 GL 管道物件。 |
| 2 | void addGLEventListener(GLEventListener Listener) 將給定的偵聽器新增到當前可繪製佇列的末尾。 |
| 3 | void addGLEventListener(int index, GLEventListener listener) 將給定的偵聽器新增到此可繪製佇列的指定索引處。 |
| 4 | void destroy() **銷燬**與 GLAutoDrawable 介面的此物件關聯的所有資源,包括 GLContext。 |
**注意** - 此包中還有其他方法。在此介面中僅討論了一些與模板相關的重要方法。
GLCanvas 類
**GLCanvas** 和 **GLJpanel** 是 JOGL GUI 的兩個主要類,它們實現了 **GLAutoDrawable** 介面,可以用作 OpenGL 命令的繪圖表面。
GLCanvas 是一個重量級 AWT 元件,提供 OpenGL 渲染支援。這是 **AWTAutoGLDrawable** 介面的主要實現。它還繼承了 **java.awt.Canvas** 類。由於它是一個重量級元件,因此在某些情況下,**GLJCanvas** 可能無法與 Swing 元件正確整合。因此,在與 Swing 一起使用時必須小心。每當您遇到 **GLJCanvas** 問題時,都必須使用 **GLJPanel** 類。
GLCanvas 類的層次結構圖如下所示 -
**GLEventistener** 介面與 **GLCanvas** 類一起工作。它響應 **GLCanvas** 類中的更改以及它們發出的繪圖請求。
每當例項化 **GLCanvas** 類時,都會呼叫 **GLEventListener** 的 **init()** 方法。您可以覆蓋此方法以初始化 OpenGL 狀態。
每當最初繪製(例項化)或調整 **GLCanvas** 大小時,都會執行 **GLEventListener** 的 **reshape()** 方法。它用於初始化 OpenGL 視口和投影矩陣。當元件的位置發生變化時,也會呼叫它。
**GLEventListener** 的 display() 方法包含用於渲染 3D 場景的程式碼。每當呼叫 **GLCanvas** 的 display() 方法時,都會呼叫它。
下面列出了例項化 GLCanvas 類所需的建構函式。
| 序號 | 建構函式和描述 |
|---|---|
| 1 | GLCanvas() 它使用預設的 OpenGL 功能選擇機制,在預設的螢幕裝置上建立一個具有預設 OpenGL 功能集的新 GLCanvas 元件。 |
| 2 | GLCanvas(GLCapabilitiesImmutable) 它使用預設的 OpenGL 功能選擇機制,在預設的螢幕裝置上建立一個具有請求的 OpenGL 功能集的新 GLCanvas 元件。 |
下面列出了用於 GLCanvas 類事件處理的方法。
| 序號 | 方法和描述 |
|---|---|
| 1 | void addGLEventListener(GLEventListener listener) 將給定的偵聽器新增到此可繪製佇列的末尾。 |
| 2 | void addGLEventListener(int indexGLEventListener listener) 將給定的偵聽器新增到此可繪製佇列的指定索引處。 |
要例項化 **GLCanvas** 類,您需要 **GLCapabilitiesImmutable** 介面的物件,該介面指定一組不可變的 OpenGL 功能。
獲取 **CapabilitiesImmutable** 介面物件的一種方法是例項化 **GLCapabilities** 類,該類實現了該介面。**GLCapabilities** 類的例項可以用於達到目的。
GLCapabilities 類
此類指定一組 OpenGL 功能。它以 GLCapabilities 物件作為引數。**GLCapabilities** 類描述了渲染上下文必須支援的所需功能,例如 OpenGL 配置檔案。
下面列出了例項化 GLCapabilities 類的建構函式
| 序號 | 方法和描述 |
|---|---|
| 1 | GLCapabilities(GLProfile glprofile) 它建立一個 GLCapabilities 物件。 |
要例項化 **GLCanvas** 類,您需要 GLCapabilitiesImmutable 介面的物件,該介面指定一組不可變的 OpenGL 功能。
獲取 **CapabilitiesImmutable** 介面物件的一種方法是例項化 **GLCapabilities** 類,該類實現了該介面。**GLCapabilities** 類的例項可以用於達到目的。
**GLCapabilities** 類又需要一個 **GLProfile** 物件。
GLProfile 類
由於釋出了多個版本的 OpenGL API;您需要將程式中使用的 OpenGL API 的確切版本指定給您的 Java 虛擬機器 (JVM)。這是使用 **GLProfile** 類完成的。
此類的 **get()** 方法接受不同的預定義 **String** 物件作為引數。每個字串物件都是一個介面的名稱,每個介面都支援某些版本的 OpenGL。如果將此類初始化為靜態和單例,則它將為您提供每個可用 JOGL 配置檔案的單例 **GLProfile** 物件。
下面給出了 GLProfile 類 get 方法的原型。
| 序號 | 方法和描述 |
|---|---|
| 1 | Static GLProfile get(String profile) 使用預設裝置。 |
由於這是一個靜態方法,因此您需要使用類名呼叫它,並且它需要一個預定義的靜態字串變數作為引數。此類中有 12 個這樣的變數,每個變數都表示 GL 介面的一個單獨實現。
GLProfile.get(GLProfile.GL2);
get() 方法的引數
| 序號 | 預定義字串值(介面名稱)和描述 |
|---|---|
| 1 | GL2 此介面包含所有 OpenGL [1.0 … 3.0] 方法以及在此規範制定時定義的大多數擴充套件。 |
| 2 | GLES1 此介面包含所有 OpenGL ES [1.0 ... 1.1] 方法以及在此規範制定時定義的大多數擴充套件。 |
| 3 | GLES2 此介面包含所有 OpenGL ES 2.0 方法以及在此規範制定時定義的大多數擴充套件。 |
| 4 | GLES3 此介面包含所有 OpenGL ES 3.0 方法以及在此規範制定時定義的大多數擴充套件。 |
| 5 | GL2ES1 此介面包含 GL2 和 GLES1 的公共子集。 |
| 6 | GL2ES2 此介面包含 GL3、GL2 和 GLES2 的公共子集。 |
| 7 | GL2GL3 此介面包含核心 GL3(OpenGL 3.1+)和 GL2 的公共子集。 |
| 8 | GL3 此介面包含所有 OpenGL [3.1 ... 3.3] 的*核心*方法以及在此規範制定時定義的大多數擴充套件。 |
| 9 | GL3bc 此介面包含所有 OpenGL [3.1 ... 3.3] 的*相容性*方法,以及在此規範制定時定義的大多數擴充套件。 |
| 10 | GL3ES3 此介面包含核心 GL3(OpenGL 3.1+)和 GLES3(OpenGL ES 3.0)的公共子集。 |
| 11 | GL4 此介面包含所有 OpenGL [4.0 ... 4.3] 的*核心*方法以及在此規範制定時定義的大多數擴充套件。 |
| 12 | GL4bc 此介面包含所有 OpenGL [4.0 ... 4.3] 的*相容性配置檔案*,以及在此規範制定時定義的大多數擴充套件。 |
| 13 | GL4ES3 包含核心 GL4(OpenGL 4.0+)和 GLES3(OpenGL ES 3.0)的公共子集的介面。 |
GLJPanel 類
它是一個輕量級 Swing 元件,提供 OpenGL 渲染支援。它用於與 Swing 的相容性。
GLJPanel 類層次結構
下面給出的圖表示 GLJPanel 類的類層次結構。
下面給出了各種 GLJPanel 類建構函式。
| 序號 | 建構函式和描述 |
|---|---|
| 1 | GJPanel() 它使用一組預設的 OpenGL 功能建立一個新的 GLJPanel 元件。 |
| 2 | (GLCapabilitiesImmutable) 它建立一個新的 GLJPanel 元件,並具有請求的 OpenGL 功能集。 |
| 3 | GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser) 它建立一個新的 GLJPanel 元件。 |
以下是 GLJPanel 類的使用方法。
| 序號 | 方法和描述 |
|---|---|
| 1 | void addGLEventListener(GLEventListener listener) 此方法將給定的監聽器新增到此可繪製佇列的末尾。 |
| 2 | void addGLEventListener(int indexGLEventListener listener) 此方法將給定的監聽器新增到此可繪製佇列的指定索引處。 |