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