📜  JOGL-带AWT的画布

📅  最后修改于: 2020-11-13 04:52:33             🧑  作者: Mango


本章介绍如何使用带有AWT框架的Canvas绘制JOGL基本框架。在这里,我们将构造一个AWT框架,并使用frame类的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)使用GLCanvas从javax.media.opengl.awt.AWTGLAutoDrawable继承的setSize()方法设置帧的大小。

glcanvas.setSize( 400, 400 );

现在,您已经准备好GLCanvas了

第三步:创建框架

通过实例化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一起使用时形成的基本框架-

基本框架