JOGL - 绘图基础
OpenGL API 提供了绘制基本图形元素(如点、顶点、线等)的原始方法。使用这些方法,您可以绘制三角形、多边形和圆形等形状。既有 2D 维度,也有 3D 维度。本章将教您如何在 Java 程序中使用 JOGL 绘制基本线条。
绘图对象
为了访问特定于硬件和操作系统平台的程序以及使用其他语言(如 C 和 C++(本机应用程序))编写的库,Java 使用一种称为 Java 本机接口 (JNI) 的编程框架。 JOGL 内部使用此接口来访问 OpenGL 函数,如下图所示。

GLEventListener 接口的所有四个方法都有代码(java JOGL 方法)来内部调用 OpenGL 函数。这些 JOGL 方法的命名也类似于 OpenGL 的命名约定。如果 OpenGL 中的函数名称是 glBegin(),则将其用作 gl.glBegin()。
每当调用 java JOGL 的 gl.glBegin() 方法时,它都会内部调用 OpenGL 的 glBegin() 方法。这就是在安装 JOGL 时在用户系统上安装本机库文件的原因。
Display() 方法
这是一个重要的方法,它保存了开发图形的代码。它 需要 GLAutoDrawable 接口对象作为其参数。
display() 方法最初使用 GL 接口的对象获取 OpenGL 上下文(GL 继承了 GLBase 接口,该接口包含生成所有 OpenGL 上下文对象的方法)。由于本教程是关于 JOGL2 的,让我们生成一个 GL2 对象。
以下代码片段显示了如何生成 GL2 对象 −
//生成 GL 对象 GL gl = drawable.getGL(); GL gl = drawable.getGL(); //使用此方法获取 Gl2 对象 //这可以写成一行,例如 final GL2 gl = drawable.getGL().getGL2();
使用 GL2 接口的对象,可以访问此接口的成员, 进而提供对 OpenGL [1.0... 3.0] 函数的访问。
绘制线条
GL2 接口包含大量方法,但这里讨论的是三个主要的重要方法,即 glBegin()、glVertex() 和 glEnd()。
Sr.No. | 方法和说明 |
---|---|
1 | glBegin() 此方法启动绘制线条的过程。它以预定义的字符串整数"GL_LINES"作为参数,该参数继承自 GL 接口。 |
2 | glVertex3f()/glVertex2f() 此方法创建顶点,我们必须将坐标作为参数 3f 和 2f 传递,它们分别表示三维浮点坐标和二维浮点坐标。 |
3 | glEnd() 结束线条 |
下面给出的是使用 JOGL 绘制基本线条的程序 −
import javax.media.opengl.GL2; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLCapabilities; import javax.media.opengl.GLEventListener; import javax.media.opengl.GLProfile; import javax.media.opengl.awt.GLCanvas; import javax.swing.JFrame; public class Line implements GLEventListener { @Override public void display(GLAutoDrawable drawable) { final GL2 gl = drawable.getGL().getGL2(); gl.glBegin (GL2.GL_LINES);//static field gl.glVertex3f(0.50f,-0.50f,0); gl.glVertex3f(-0.50f,0.50f,0); gl.glEnd(); } @Override public void dispose(GLAutoDrawable arg0) { //method body } @Override public void init(GLAutoDrawable arg0) { // method body } public static void main(String[] args) { //获取 GL2 配置文件的功能对象 final GLProfile profile = GLProfile.get(GLProfile.GL2); GLCapabilities capabilities = new GLCapabilities(profile); // 画布 final GLCanvas glcanvas = new GLCanvas(capabilities); Line l = new Line(); glcanvas.addGLEventListener(l); glcanvas.setSize(400, 400); //创建框架 final JFrame frame = new JFrame ("straight Line"); //将画布添加到框架 frame.getContentPane().add(glcanvas); frame.setSize(frame.getContentPane().getPreferredSize()); frame.setVisible(true); }//end of main }//end of classimport javax.media.opengl.GL2;
