当前位置: 首页 > 文档资料 > JOGL 中文教程 >

API for Basic 模板

优质
小牛编辑
129浏览
2023-12-01

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

GLEventListener接口

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

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

Sr.No.方法和描述
1

Void display(GLAutoDrawable drawable)

它由GLAutoDrawable接口的对象调用,以启动客户端的OpenGL呈现。 即,此方法包含用于使用OpenGL API绘制图形元素的逻辑。

2

Void dispose(GLAutoDrawable drawable)

此方法通知侦听器每个GLContext执行所有OpenGL资源的释放,例如内存缓冲区和GLSL程序。

3

Void init(GLAutoDrawble drawable)

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

4

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

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

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

GLAutoDrawable接口

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

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

Sr.No方法和描述
1

GL getGL()

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

2

void addGLEventListener(GLEventListener Listener)

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

3

void addGLEventListener(int index, GLEventListener listener)

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

4

void destroy()

Destroys与GLAutoDrawable接口的此对象关联的所有资源,包括GLContext。

Note - 此包中还有其他方法。 在该界面中仅讨论了与模板有关的一些重要方法。

GLCanvas类

GLCanvasGLJpanel是实现GLAutoDrawable接口的两个主要类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类所需的构造函数。

Sr.No构造函数和描述
1

GLCanvas()

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

2

GLCanvas(GLCapabilitiesImmutable)

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

下面给出了用于GLCanvas类的事件处理的方法。

Sr. No.方法和描述
1

void addGLEventListener(GLEventListener listener)

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

2

void addGLEventListener(int indexGLEventListener listener)

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

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

获取CapabilitiesImmutable接口的对象的方法之一是实例化GLCapabilities类,该类实现接口。 GLCapabilities类的实例可用于实现此目的。

GLCapabilities类

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

下面给出了一个实例化GLCapabilities类的构造函数

Sr. No.方法和描述
1

GLCapabilities(GLProfile glprofile)

它创建了一个GLCapabilities对象。

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

获取CapabilitiesImmutable接口的对象的方法之一是实例化GLCapabilities类,该类实现接口。 GLCapabilities类的实例可用于实现此目的。

GLCapabilities类又需要一个GLProfile对象。

GLProfile类

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

此类的get()方法接受不同的预定义String对象作为参数。 每个String对象都是一个接口的名称,每个接口都支持某些版本的OpenGL。 如果将此类初始化为static和singleton,它会为每个可用的JOGL概要文件提供单独的GLProfile对象。

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

Sr.No.方法和描述
1

Static GLProfile get(String profile)

使用默认设备。

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

GLProfile.get(GLProfile.GL2);

Parameters of get() method

Sr.No预定义字符串值(接口名称)和描述
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] core方法以及本规范时定义的大多数扩展。

9

GL3bc

该接口包含所有OpenGL [3.1 ... 3.3] compatibility方法,以及在本规范时定义的大多数扩展。

10

GL3ES3

该接口包含核心GL3(OpenGL 3.1+)和GLES3(OpenGL ES 3.0)的公共子集。

11

GL4

该接口包含所有OpenGL [4.0 ... 4.3] core方法,以及在本规范时定义的大多数扩展。

12

GL4bc

此接口包含所有OpenGL [4.0 ... 4.3] compatibility profilewell as most of its extensions defined at the time of this specification.

13

GL4ES3

包含核心GL4(OpenGL 4.0+)和GLES3(OpenGL ES 3.0)的公共子集的接口。

GLJPanel类

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

GLJPanel类层次结构

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

GJPanel

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

Sr. No.构造函数和描述
1

GJPanel()

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

2

(GLCapabilitiesImmutable)

它使用所请求的OpenGL功能集创建一个新的GLJPanel组件。

3

GLJPanel(GLCapabilitiesImmutable userCapsRequest, GLCapabilitiesChooser chooser)

它创建了一个新的GLJPanel组件。

下面给出了GLJPanel类的方法。

Sr.No.方法和描述
1

void addGLEventListener(GLEventListener listener)

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

2

void addGLEventListener(int indexGLEventListener listener)

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