JOGL - 使用AWT的畫布



本章解釋如何使用帶有AWT框架的畫布繪製JOGL基本框架。在這裡,我們將構建一個AWT框架,並使用框架類的add()方法將畫布物件新增到AWT框架。

下面是編寫程式的步驟,該程式建立了一個結合了JOGL的Canvas類和AWT的Frame類的JOGL基本框架。

步驟1:建立類

首先建立一個實現GlEventListener介面的類,並匯入包javax.media.opengl。實現所有四個方法display(),dispose(),reshape(),init()。由於這是基本框架,因此討論了建立畫布類、將其新增到框架等基本任務。所有GLEventListener介面方法都未實現。

步驟2:準備畫布

(a) 構造GLCanvas類物件

final GLCanvas glcanvas = new GLCanvas( xxxxxxx );

//here capabilities obj should be passed as parameter

(b) 例項化GLCapabilities

GLCapabilities capabilities = new GLCapabilities( xxxxx );

//here profile obj should be passed as parameter

(c) 生成GLProfile物件

由於它是靜態方法,因此使用類名呼叫它。由於本教程是關於JOGL2的,因此讓我們生成GL2介面物件。

final GLProfile profile = GLProfile.get( GLProfile.GL2 );

// both, variable and method are static hence both are called using class name.

讓我們看看畫布的程式碼片段。

//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);

(d) 現在使用addGLEventListener()方法將GLEventListener新增到畫布。此方法需要GLEventListener介面的物件作為引數。因此,傳遞實現GLEventListener的類的物件。

BasicFrame basicframe = newBasic Frame( );// class which implements
GLEventListener interface
glcanvas.addGLEventListener( basicframe );

(e) 使用從javax.media.opengl.awt.AWTGLAutoDrawable繼承的GLCanvas的setSize()方法設定框架的大小。

glcanvas.setSize( 400, 400 );

現在您已經準備好GLCanvas了。

步驟3:建立框架

透過例項化JSE AWT框架元件的Frame類物件來建立框架。

將畫布新增到其中,並使框架可見。

//creating frame
final Frame frame = new frame( " Basic Frame" );

//adding canvas to frame
frame.add( glcanvas );
frame.setVisible( true ); 

步驟4:全屏檢視框架

要全屏檢視框架,請使用java.awt.Toolkit類獲取預設螢幕大小。現在,使用這些預設螢幕尺寸,使用setSize()方法設定框架大小。

Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setSize(screenSize.width, screenSize.height);

讓我們來看一下使用AWT生成基本框架的程式:

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 BasicFrame implements GLEventListener {

   @Override
   public void display(GLAutoDrawable arg0) {
      // method body
   }
	
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0) {
      // method body
   }
	
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // 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);
      BasicFrame b = new BasicFrame();
      glcanvas.addGLEventListener(b);        
      glcanvas.setSize(400, 400);
        
      //creating frame
      final Frame frame = new Frame (" Basic Frame");
        
      //adding canvas to frame
      frame.add(glcanvas);
      frame.setSize( 640, 480 );
      frame.setVisible(true);
   }
	
}

如果您編譯並執行上述程式,則會生成以下輸出。它顯示了使用GLCanvas類和AWT時形成的基本框架:

Basic Frame
廣告