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 類的層次結構圖如下所示 -

Canvas
  • **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 類的類層次結構。

GJPanel

下面給出了各種 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)

此方法將給定的監聽器新增到此可繪製佇列的指定索引處。

廣告

© . All rights reserved.