- JOGL Tutorial
- JOGL - Home
- JOGL - Overview
- JOGL - Installation
- JOGL Basic Templates
- JOGL - API for Basic Templates
- JOGL - Canvas with AWT
- JOGL - Canvas with Swing
- JOGL - GLJPanel Class
- JOGL Graphical Shapes
- JOGL - Drawing Basics
- JOGL - Drawing with GL_Lines
- JOGL - Pre-defined shapes
- JOGL Effects & Transformation
- JOGL - Transformation
- JOGL - Coloring
- JOGL - Scaling
- JOGL - Rotation
- JOGL - Lighting
- JOGL 3D Graphics
- JOGL - 3D Basics
- JOGL - 3D Triangle
- JOGL - 3D Cube
- JOGL - Appendix
- JOGL Useful Resources
- JOGL - Quick Guide
- JOGL - Useful Resources
- JOGL - Discussion
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 类
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(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 类的类层次结构。
下面给出的是 GLJPanel 类的各种构造函数。
先生。没有。 | 构造函数和描述 |
---|---|
1 | GJ面板() 它创建一个具有一组默认 OpenGL 功能的新 GLJPanel 组件。 |
2 | (GL能力不可变) 它创建一个新的 GLJPanel 组件,具有所请求的 OpenGL 功能集。 |
3 | GLJPanel(GLCapabilityImmutable userCapsRequest,GLCapabilityChooser 选择器) 它创建一个新的 GLJPanel 组件。 |
下面给出的是 GLJPanel 类的方法。
先生。 | 方法和说明 |
---|---|
1 | 无效addGLEventListener(GLEventListener监听器) 此方法将给定侦听器添加到此可绘制队列的末尾。 |
2 | void addGLEventListener(int indexGLEventListener 监听器) 此方法将给定侦听器添加到该可绘制队列的给定索引处。 |