JOGL - 基本模板的API

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

GLEventListener接口

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

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

Sr.No的描述.方法和描述
1

Void显示(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 interface :

Sr.No方法和描述
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 是实现 GLAutoDrawable 接口的两个主要类JOGL GUI,可用作OpenGL命令的绘图表面.

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

GLCanvas的层次图可以如下所示 :

Canvas

  • GLEventistener 界面与 GLCanvas 类一起使用.它响应 GLCanvas 类的变化以及它们的绘图请求.

  • 每当 GLCanvas class被实例化, GLEventListener init()方法被调用.您可以覆盖此方法以初始化OpenGL状态.

  • 每当 GLCanvas 最初(实例化)或调整大小时,执行 GLEventListener 的reshape()方法.它用于初始化OpenGL视口和投影矩阵.每当组件的位置发生变化时也会调用它.

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

下面给出的构造函数需要实例化GLCanvas类.

Sr.No构造函数和描述
1

GLCanvas( )

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

2

GLCanvas(GLCapabilitiesImmutable)

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

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

Sr.否.方法和描述
1

void addGLEventListener(GLEventListener listener)

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

2

void addGLEventListener(int indexGLEventListener listener)

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

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

获取 CapabilitiesImmutable 接口对象的方法之一是实例化实现接口的 GLCapabilities 类.可以使用 GLCapabilities 类的实例来实现此目的.

GLCapabilities类

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

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

Sr.否.方法和描述
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 对象.

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

Sr.No.方法和描述
1

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

使用默认设备.

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

GLProfile.get(GLProfile.GL2);

get()方法的参数

Sr.No预定义字符串值(接口名称)和描述
1

GL2

这interface包含所有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

此int erface包含所有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 Class

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

GLJPanel类层次结构

下面给出的是图表,表示GLJPanel类的类层次结构.

GJPanel

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

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

GJPanel()

它创建一个新的GLJPanel组件,其中包含一组默认的OpenGL功能.

2

(GLCapabilitiesImmutable)

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

3

GLJPanel(GLCapabilitiesImmutable userCapsRequest,GLCapabilitiesChooser选择器)

它创建一个新的GLJPanel组件.

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

Sr.No.方法和描述
1

void addGLEventListener(GLEventListener listener)

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

2

void addGLEventListener(int indexGLEventListener listener)

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