JOGL - 绘图基础知识


OpenGL API 提供了绘制点、顶点、线等基本图形元素的原始方法。使用这些方法,您可以开发三角形、多边形和圆形等形状。在 2D 和 3D 维度中。本章将教您如何在 Java 程序中使用 JOGL 绘制基本线条。

绘制对象

为了访问特定于硬件和操作系统平台的程序以及用其他语言(例如 C 和 C++)编写的库(本机应用程序),Java 使用称为Java 本机接口 (JNI) 的编程框架。JOGL 在内部使用此接口来访问 OpenGL 函数,如下图所示。

JNI

GLEventListener接口的所有四个方法都有内部调用OpenGL函数的代码(java JOGL方法)。这些JOGL方法的命名也与OpenGL的命名约定类似。如果 OpenGL 中的函数名称为glBegin(),则将其用作gl.glBegin()

每当调用java JOGL的gl.glBegin()方法时,它都会在内部调用OpenGL的glBegin()方法。这就是安装 JOGL 时在用户系统上安装本机库文件的原因。

Display() 方法

这是保存图形开发代码的重要方法。它需要GLAutoDrawable接口对象作为其参数。

display ()方法最初使用GL接口的对象获取OpenGL上下文(GL继承GLBase接口,其中包含生成所有OpenGL上下文对象的方法)。由于本教程是关于 JOGL2 的,因此让我们生成一个 GL2 对象。

以下代码片段显示了如何生成 GL2 对象 -

//Generating GL object
GL gl = drawable.getGL();
GL gl = drawable.getGL();

//Using this Getting the Gl2 Object
//this can be written in a single line like
final GL2 gl = drawable.getGL().getGL2();

使用 GL2 接口的对象,可以访问该接口的成员,从而提供对 OpenGL [1.0...3.0] 函数的访问。

画一条线

GL2 接口包含大量方法,但这里讨论三个主要的重要方法,即glBegin()glVertex()glEnd()

先生。 方法和说明
1

glBegin()

此方法开始绘制线条的过程。它以预定义的字符串整数“GL_LINES”作为参数,该参数继承自GL接口。

2

glVertex3f()/glVertex2f()

该方法创建顶点,我们必须将坐标作为参数 3f 和 2f 传递,它们分别表示 3 维浮点坐标和 2 维浮点坐标。

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) {

      //getting the capabilities object of GL2 profile        
      final GLProfile profile = GLProfile.get(GLProfile.GL2);
      GLCapabilities capabilities = new GLCapabilities(profile);
   
      // The canvas
      final GLCanvas glcanvas = new GLCanvas(capabilities);
      Line l = new Line();
      glcanvas.addGLEventListener(l);
      glcanvas.setSize(400, 400);
   
      //creating frame
      final JFrame frame = new JFrame ("straight Line");
   
      //adding canvas to frame
      frame.getContentPane().add(glcanvas);
                 
      frame.setSize(frame.getContentPane().getPreferredSize());
      frame.setVisible(true);
      
   }//end of main
	
}//end of classimport javax.media.opengl.GL2;
线