绘图基础知识(Drawing Basics)
OpenGL API提供了绘制基本图形元素(如点,顶点,直线等)的基本方法。使用这些方法,您可以开发三角形,多边形和圆形等形状。 在2D和3D维度中。 本章将教您如何在Java程序中使用JOGL绘制基本行。
绘图对象
要访问特定于硬件和操作系统平台的程序以及使用其他语言(如C和C ++(本机应用程序)编写库),Java使用称为Java Native Interface (JNI)的编程框架。 JOGL在内部使用此接口来访问OpenGL函数,如下图所示。
GLEventListener接口的所有四个方法都有代码(java JOGL方法)在内部调用OpenGL函数。 这些JOGL方法的命名也类似于OpenGL的命名约定。 如果OpenGL中的函数名是glBegin() ,则将其用作gl.glBegin() 。
每当调用java JOGL的gl.glBegin()方法时,它就会在内部调用OpenGL的glBegin()方法。 这是在安装JOGL时在用户系统上安装本机库文件的原因。
The Display() Method
这是一个保存开发图形代码的重要方法。 它需要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. | 方法和描述 |
---|---|
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) {
//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;