使用JOGL编程,可以绘制各种图形形状,如直线,三角形,3D形状,包括旋转,光照,颜色等特殊效果.要首先在JOGL中绘制对象,我们必须构建一个基本的JOGL框架.下面给出了构造基本框架所需的类.
为了使您的程序能够使用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 接口的对象作为参数.
此接口提供基于事件的机制(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 和 GLJpanel 是实现 GLAutoDrawable 接口的两个主要类JOGL GUI,可用作OpenGL命令的绘图表面.
GLCanvas是一个重量级AWT组件,提供OpenGL渲染支持.这是 AWTAutoGLDrawable 界面的主要实现.它还继承了 java.awt.Canvas 类.由于它是重量级组件,在某些情况下, GLJCanvas 可能无法正确地与swing组件集成.因此,在使用Swing时必须小心.每当你遇到 GLJCanvas 的问题时,你必须使用 GLJPanel 类.
类 GLCanvas的层次图可以如下所示 :
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 类的实例来实现此目的.
此类指定一组OpenGL功能.它将GLCapabilities对象作为参数. GLCapabilities 类描述了渲染上下文必须支持的所需功能,例如OpenGL配置文件.
下面给出了一个实例化GLCapabilities类的构造函数
Sr.否. | 方法和描述 |
---|---|
1 | GLCapabilities(GLProfile glprofile) 它会创建一个GLCapabilities对象. |
要实例化 GLCanvas 类,需要一个GLCapabilitiesImmutable接口的对象,它指定一组不可变的OpenGL功能.
获取 CapabilitiesImmutable 接口对象的方法之一是实例化实现接口的 GLCapabilities 类. GLCapabilities 类的实例可用于实现此目的.
GLCapabilities 类又需要 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);
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). |
它是一个轻量级的Swing组件,提供OpenGL渲染支持.它提供
以与Swing兼容.
下面给出的是图表,表示GLJPanel类的类层次结构.
下面给出了各种构造函数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) 此方法在给定的可绘制队列索引处添加给定的侦听器. |