JOGL - 带有 AWT 的 Canvas

本章向您介绍如何使用带有 AWT 框架的 Canvas 绘制 JOGL 基本框架。在这里,我们将构造一个 AWT 框架,并使用框架类的 add() 方法将画布对象添加到 AWT 框架。

下面给出了编写程序的步骤,该程序结合 JOGL 的 Canvas 类和 AWT 的 Frame 类创建 JOGL 基本框架。

步骤 1:创建类

首先创建一个实现 GlEventListener 接口的类,并导入包 javax.media.opengl。实现所有四个方法 display()、dispose()、 reshape()、init()。由于这是基本框架,因此讨论了创建画布类、将其添加到框架等基本任务。所有 GLEVentListener 接口方法均未实现。

步骤 2:准备 Canvas

(a) 构造 GLCanvas 类对象

final GLCanvas glcanvas = new GLCanvas( xxxxxxx );

//此处应将 capabilities obj 作为参数传递

(b) 实例化 GLCapabilities

GLCapabilities capabilities = new GLCapabilities( xxxxx );

//此处应将配置文件 obj 作为参数传递

(c) 生成 GLProfile 对象

由于它是静态方法,因此使用类名调用它。由于本教程是关于 JOGL2 的,让我们生成 GL2 接口对象。

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

// 变量和方法都是静态的,因此都使用类名调用。

让我们看看画布的代码片段。

//获取 GL2 配置文件的功能对象

final GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities capabilities = new GLCapabilities(profile);

// 画布
final GLCanvas glcanvas = new GLCanvas(capabilities);

(d) 现在使用方法 addGLEventListener()GLEventListener 添加到画布。此方法需要 GLEventListener 接口的对象作为参数。因此,传递实现 GLEventListener 的类的对象。

BasicFrame basicframe = newBasic Frame( );// 实现
GLEventListener 接口的类
glcanvas.addGLEventListener( basicframe );

(e) 使用 GLCanvas 从 javax.media.opengl.awt.AWTGLAutoDrawable 继承的 setSize() 方法设置框架的大小。

glcanvas.setSize( 400, 400 );

现在您已准备好使用 GLCanvas

步骤 3:创建框架

通过实例化 JSE AWT 框架组件的 Frame 类对象来创建框架。

向其添加画布并使框架可见。

//创建框架
final Frame frame = new frame( " Basic 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) {
      // 方法主体
   }
	
   @Override
   public void dispose(GLAutoDrawable arg0) {
      //method body
   }
	
   @Override
   public void init(GLAutoDrawable arg0) {
      // 方法主体
   }
	
   @Override
   public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
      // 方法主体
   }
	
   public static void main(String[] args) {
   
        //获取 GL2 配置文件的功能对象
        final GLProfile profile = GLProfile.get(GLProfile.GL2);
        GLCapabilities capabilities = new GLCapabilities(profile);
        
        // 画布
        final GLCanvas glcanvas = new GLCanvas(capabilities);
        BasicFrame b = new BasicFrame();
        glcanvas.addGLEventListener(b);
        glcanvas.setSize(400, 400);
        
        //创建框架
        final Frame frame = new Frame (" Basic Frame");
        
        //将画布添加到框架
        frame.add(glcanvas);
        frame.setSize( 640, 480 );
        frame.setVisible(true);
   }
	
}

如果你编译并执行上述程序,将生成以下输出。 它显示了当我们将 GLCanvas 类与 AWT 结合使用时形成的基本框架 −

基本框架