API for Basic 模板
使用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类
GLCanvas和GLJpanel是实现GLAutoDrawable接口的两个主要类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类所需的构造函数。
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 profile , well 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类的类层次结构。
下面给出了各种构造函数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) 此方法在给定的可绘制队列的索引处添加给定的侦听器。 |