JOGL - 基本模板的 API


使用JOGL编程,可以绘制各种图形形状,例如直线、三角形、3D形状,包括旋转、照明、颜色等特殊效果。要在JOGL中绘制对象,首先我们必须构造一个基本的JOGL框架。下面给出的是构建基本框架所需的类。

GLEventListener接口

为了使您的程序能够使用JOGL图形API,您需要实现GLEventListener接口。您可以在javax.media.opengl包中找到GLEventListener接口。

下表提供了GLEventListener接口的各种方法和描述的详细信息 -

先生。 方法和描述
1

无效显示(GLAutoDrawable可绘制)

由GLAutoDrawable接口的对象调用,客户端发起OpenGL渲染。即,该方法包含用于使用 OpenGL API 绘制图形元素的逻辑。

2

无效处置(GLAutoDrawable可绘制)

此方法向侦听器发出信号,要求释放每个 GLContext 的所有 OpenGL 资源,例如内存缓冲区和 GLSL 程序。

3

无效初始化(GLAutoDrawble可绘制)

它在 OpenGL 上下文初始化后立即由 GLAutoDrawable 接口的对象调用。

4

void reshape(GLAutoDrawble drawble, int x, int y, int width, int height)

在组件调整大小后的第一次重绘期间,它由 GLAutoDrawable 接口的对象调用。每当窗口上的组件位置发生更改时,也会调用它。

GLEventListener的所有方法都需要GLAutoDrawable接口的对象作为参数。

GLAutoDrawable接口

该接口提供基于事件的机制(GLEventListener)来执行 OpenGL 渲染。GLAutoDrawable自动创建一个主渲染上下文,该上下文在对象的生命周期内与GLAutoDrawable关联。

下表提供了GLAutoDrawable接口的各种方法和描述的详细信息 -

先生编号 方法和描述
1

GL 获取GL()

返回 GLAutoDrawable 接口的当前对象使用的 GL 管道对象。

2

无效addGLEventListener(GLEventListener监听器)

将给定侦听器添加到当前可绘制队列的末尾。

3

void addGLEventListener(int 索引, GLEventListener 监听器)

在此可绘制队列的给定索引处添加给定侦听器。

4

无效销毁()

销毁与 GLAutoDrawable 接口的该对象关联的所有资源,包括 GLContext。

注意- 此包中还有其他方法。该接口仅讨论与模板相关的几个重要方法。

GLCanvas 类

GLCanvasGLJpanel是 JOGL GUI 的两个主要类,它们实现了GLAutoDrawable接口,可以用作 OpenGL 命令的绘图表面。

GLCanvas 是一个重量级的 AWT 组件,提供 OpenGL 渲染支持。这是AWTAutoGLDrawable接口的主要实现。它还继承了java.awt.Canvas类。由于它是一个重量级组件,在某些情况下,GLJCanvas可能无法与 swing 组件正确集成。因此,与 Swing 一起使用时必须小心。每当您遇到GLJCanvas问题时,您必须使用GLJPanel类。

GLCanvas类的层次结构图如下所示:

帆布
  • GLEventistener接口与GLCanvas类一起工作。它响应GLCanvas类中的更改以及它们发出的绘图请求。

  • 每当实例化GLCanvas类时,就会调用GLEventListenerinit()方法。您可以重写此方法来初始化 OpenGL 状态。

  • 每当GLCanvas被初始绘制(实例化)或调整大小时,GLEventListenerreshape()方法就会被执行。它用于初始化OpenGL视口和投影矩阵。每当组件的位置发生更改时也会调用它。

  • GLEventListener的 display() 方法包含渲染 3D 场景的代码。每当调用GLCanvas的 display() 方法时都会调用它。

下面给出了实例化 GLCanvas 类所需的构造函数。

先生编号 构造函数和描述
1

GLCanvas()

它在默认屏幕设备上使用默认 OpenGL 功能选择机制创建一个具有默认 OpenGL 功能集的新 GLCanvas 组件。

2

GLCanvas(GL能力不可变)

它使用默认屏幕设备上的默认 OpenGL 功能选择机制创建一个具有所请求的 OpenGL 功能集的新 GLCanvas 组件。

下面给出的是 GLCanvas 类的事件处理方法。

先生。没有。 方法和说明
1

无效addGLEventListener(GLEventListener监听器)

将给定侦听器添加到此可绘制队列的末尾。

2

void addGLEventListener(int indexGLEventListener 监听器)

在此可绘制队列的给定索引处添加给定侦听器。

要实例化GLCanvas类,您需要GLCapabilityImmutable接口的对象,该对象指定一组不可变的 OpenGL 功能。

获取CapabilityImmutable接口对象的方法之一是实例化实现该接口的GLCapability类。GLCapability类的实例可用于达到此目的。

GL能力等级

此类指定一组 OpenGL 功能。它以 GLCapability 对象作为参数。GLCapability类描述渲染上下文必须支持所需功能,例如 OpenGL 配置文件。

下面给出的是实例化 GLCapability 类的构造函数

先生。没有。 方法和说明
1

GL功能(GLProfile glprofile)

它创建一个 GLCapability 对象。

要实例化GLCanvas类,您需要一个 GLCapabilityImmutable 接口的对象,该对象指定一组不可变的 OpenGL 功能。

获取CapabilityImmutable接口对象的方法之一是实例化实现该接口的GLCapability类。GLCapability类的实例可用于达到此目的。

GLCapability类又需要GLProfile对象

GLProfile 类

由于OpenGL API的多个版本发布;您需要向 Java 虚拟机 (JVM) 指定程序中使用的 OpenGL API 的确切版本。这是使用GLProfile类完成的。

该类的 get() 方法接受不同的预定义String对象作为参数。每个 String 对象都是一个接口的名称,每个接口都支持特定版本的 OpenGL。如果将此类初始化为静态和单例,它会为每个可用的 JOGL 配置文件提供单例GLProfile对象。

下面给出的是 GLProfile 类的 get 方法的原型。

先生。 方法及说明
1

静态 GLProfile get(字符串配置文件)

使用默认设备。

由于这是一个静态方法,您需要使用类名来调用它,并且它需要一个预定义的静态字符串变量作为参数。该类中有12个这样的变量,每个变量代表GL接口的一个单独的实现。

GLProfile.get(GLProfile.GL2);

get()方法的参数

先生编号 预定义字符串值(接口名称)和描述
1

GL2

该接口包含所有 OpenGL [1.0 … 3.0] 方法以及在本规范制定时定义的大部分扩展。

2

格莱斯1

该接口包含所有 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) 的公共子集的接口。

GLJ面板类

它是一个轻量级的 Swing 组件,提供 OpenGL 渲染支持。提供它是为了与 Swing 兼容。

GLJPanel 类层次结构

下面给出的图表表示 GLJPanel 类的类层次结构。

GJ面板

下面给出的是 GLJPanel 类的各种构造函数。

先生。没有。 构造函数和描述
1

GJ面板()

它创建一个具有一组默认 OpenGL 功能的新 GLJPanel 组件。

2

(GL能力不可变)

它创建一个新的 GLJPanel 组件,具有所请求的 OpenGL 功能集。

3

GLJPanel(GLCapabilityImmutable userCapsRequest,GLCapabilityChooser 选择器)

它创建一个新的 GLJPanel 组件。

下面给出的是 GLJPanel 类的方法。

先生。 方法和说明
1

无效addGLEventListener(GLEventListener监听器)

此方法将给定侦听器添加到此可绘制队列的末尾。

2

void addGLEventListener(int indexGLEventListener 监听器)

此方法将给定侦听器添加到该可绘制队列的给定索引处。