- JOGL 圖形形狀
- JOGL - 繪圖基礎
- JOGL - 使用 GL_Lines 繪圖
- JOGL - 預定義形狀
- JOGL 3D 圖形
- JOGL - 3D 基礎
- JOGL - 3D 三角形
- JOGL - 3D 立方體
- JOGL - 附錄
- JOGL 有用資源
- JOGL - 快速指南
- JOGL - 有用資源
- JOGL - 討論
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;