JOGL - 繪圖基礎



OpenGL API 提供了用於繪製基本圖形元素(如點、頂點、線等)的原始方法。使用這些方法,您可以開發諸如三角形、多邊形和圓形之類的形狀。在 2D 和 3D 尺寸中。本章將教您如何在 Java 程式中使用 JOGL 繪製基本線條。

繪製物件

為了訪問特定於硬體和作業系統平臺的程式,以及庫是用其他語言(如 C 和 C++)編寫的程式(原生應用程式),Java 使用了一個名為 **Java 本地介面 (JNI)** 的程式設計框架。JOGL 在內部使用此介面來訪問 OpenGL 函式,如下面的示意圖所示。

JNI

**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;
Line
廣告

© . All rights reserved.