📅  最后修改于: 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时在用户系统上安装本机库文件的原因。
这是保存用于开发图形的代码的重要方法。它需要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;