- JOGL Tutorial
- JOGL - Home
- JOGL - Overview
- JOGL - Installation
- JOGL Basic Templates
- JOGL - API for Basic Templates
- JOGL - Canvas with AWT
- JOGL - Canvas with Swing
- JOGL - GLJPanel Class
- JOGL Graphical Shapes
- JOGL - Drawing Basics
- JOGL - Drawing with GL_Lines
- JOGL - Pre-defined shapes
- JOGL Effects & Transformation
- JOGL - Transformation
- JOGL - Coloring
- JOGL - Scaling
- JOGL - Rotation
- JOGL - Lighting
- JOGL 3D Graphics
- JOGL - 3D Basics
- JOGL - 3D Triangle
- JOGL - 3D Cube
- JOGL - Appendix
- JOGL Useful Resources
- JOGL - Quick Guide
- JOGL - Useful Resources
- JOGL - Discussion
JOGL - 绘图基础知识
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()。
先生。 | 方法和说明 |
---|---|
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;