📜  JOGL-绘图基础

📅  最后修改于: 2020-11-13 04:53:35             🧑  作者: Mango


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

绘图对象

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

杰尼

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

Sr.No. Methods and Description
1

glBegin()

This method starts the process of drawing a line. It takes predefined string integer “GL_LINES” as a parameter, which is inherited from GL interface.

2

glVertex3f()/glVertex2f()

This method creates the vertex and we have to pass coordinates as parameters 3f and 2f, which denote 3-dimensional floating point coordinates and 2-dimensional floating point coordinates respectively.

3

glEnd()

ends the line

下面给出的是使用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;

线