`
guiven
  • 浏览: 28720 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

关于JOGL

阅读更多
有许多用Java去结合OpenGL的尝试,但是第一个被大家认可并注意的是Java对于OpenGL的绑定(Java Bindings for OpenGL),或者称为JOGL。
JOGL的背景
为了创建一个图形增强的程序,从而出售给使用各种不同操作系统的用户,程序员有一个选择——OpenGL。GL代表图形库(graphics library)。OpenGL是SGI的注册商标。OpenGL显示它是一个跨平台的C语言编程API。但是事实上,在编程接口上,它是一个与硬件无关的规范。
OpenGL用来制图,速度非常快。大多数情况下,它是硬件加速的。看起来好像OpenGL可以实现一切你想要完成的图形界面。
然而,OpenGL是为C语言而写的。而C语言不是用来编写复杂应用程序的流行语言。而OpenGL一个最大的缺点是:如果不创建一个窗口(用来把图形放在里面),就什么都做不了(当然,这也是OpenGL的最大优点,它独立于具体的操作系统,语言,甚至是硬件)。而OpenGL没有提供创建窗口的方法。如此使得OpenGL对于初学者来说显得比较困难。
因此,有了GLUT(OpenGL Utility ToolKit)。它被用来轻松应对窗口、按钮以及用户事件。但是,对于想要使用面向对象方法编程的程序员来说,学习用C或者C++来编写OpenGL程序仍然不是一件简单的事情。
JOGL
Java也许是最流行的真正的面向对象的编程语言。有许多用Java去尝试结合OpenGL的尝试,但是第一个被大家认可并注意的是Java对于OpenGL的绑定——JOGL。因为它得到Sun和SGI的支持。
OpenGL被用来展示三维模型。它强大、快速,而且可能是自Swing出现以来最棒的一样东西。通过JOGL来使用OpenGL,可以制作出很酷的游戏或者是模型位置等,而在这之前创建它们需要非常昂贵的成本。
JOGL-获取JOGL
就是要找到你操作系统所对应的包,并进行解压。
这个是可以从https://jogl.dev.java.net/找到的,进入网站后点左侧的文档和文件,我下载了Release Builds 2008\JSR-231 1.1.1 - May 22 (15)里面的jogl-1.1.1-windows-i586.zip,解压就得到要的jogl.jar和其他文件了。

JOGL-实例
   
这就是你接下来的程序。请确保你输入了所有的代码到你的编辑器中。调试这些程序可以快速地使你明白它们的工作原理。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.java.games.jogl.*;

/**
* This is a basic JOGL app. Feel free to
* reuse this code or modify it.
* 这是个基础的JOGL程序,你可以随意重用该代码或者修改它。
*/
public class SecondJoglApp extends JFrame {

    public static void main(String[] args) {
       final SecondJoglApp app = new SecondJoglApp();

       //show what we've done
       //看一下我们做了什么
       SwingUtilities.invokeLater (
          new Runnable() {
             public void run() {
                app.setVisible(true);
             }
          }
       );
    }

    public SecondJoglApp() {
       //set the JFrame title
       //设置JFrame标题
       super("Second JOGL Application");

       //kill the process when the JFrame is closed
       //当JFrame关闭的时候,结束进程
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       //only three JOGL lines of code ... and here they are
       //只有三行JOGL代码 ... 如下
       GLCapabilities glcaps = new GLCapabilities();
       GLCanvas glcanvas =
          GLDrawableFactory.getFactory().createGLCanvas(glcaps);
       glcanvas.addGLEventListener(new SecondGLEventListener());
      
       //add the GLCanvas just like we would any Component
       //像其它组件一样把GLCanvas加入
       getContentPane().add(glcanvas, BorderLayout.CENTER);
       setSize(500, 300);

       //center the JFrame on the screen
       //使JFrame显示在屏幕中央
       centerWindow(this);
    }

    public void centerWindow(Component frame) {
       Dimension screenSize =
          Toolkit.getDefaultToolkit().getScreenSize();
          Dimension frameSize = frame.getSize();

          if (frameSize.width > screenSize.width )
             frameSize.width = screenSize.width;
          if (frameSize.height > screenSize.height)
             frameSize.height = screenSize.height;
           frame.setLocation (
           (screenSize.width - frameSize.width ) >> 1,
           (screenSize.height - frameSize.height) >> 1
          );
    }
}



请注意这个类对于第一个类所作的改动。改动只有类名、frame名、以及GLEventListener名。希望你能够阅读代码中的注释,否则你会搞不清它要做什么。

我们实现的GLEventListener确实相对于前面一个例子有了一些改进,它允许我们画出一些漂亮的图来。
import net.java.games.jogl.*;

/**
* For our purposes only two of the GLEventListeners matter.
* Those would be init() and display().
* 为了达到我们的目的,GLEventListener中只有两个方法有用。
* 它们是init()和display()。
*/
public class SecondGLEventListener implements GLEventListener
{

    /**
     * Take care of initialization here.
     * 注意这里的初始化。
     */
    public void init(GLDrawable gld) {
       GL gl = gld.getGL();
       GLU glu = gld.getGLU();

       gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

       gl.glViewport(0, 0, 500, 300);
       gl.glMatrixMode(GL.GL_PROJECTION);
       gl.glLoadIdentity();
       glu.gluOrtho2D(0.0, 500.0, 0.0, 300.0);
    }

    /**
     * Take care of drawing here.
     * 注意这里的绘图。
     */
    public void display(GLDrawable drawable) {

       float red = 0.0f;
       float green = 0.0f;
       float blue = 0.0f;

       GL gl = drawable.getGL();

       gl.glClear(GL.GL_COLOR_BUFFER_BIT);

       gl.glPointSize(5.0f);

       for (int i=0; i<50; i++) {

          red -= .09f;
          green -= .12f;
          blue -= .15f;

       if (red < 0.15) red = 1.0f;
       if (green < 0.15) green = 1.0f;
       if (blue < 0.15) blue = 1.0f;

       gl.glColor3f(red, green, blue);

       gl.glBegin(GL.GL_POINTS);
          gl.glVertex2i((i*10), 150);
       gl.glEnd();
    }
}

public void reshape(
                      GLDrawable drawable,
                      int x,
                      int y,
                      int width,
                      int height
                    ) {}
public void displayChanged(
                             GLDrawable drawable,
                             boolean modeChanged,
                             boolean deviceChanged
                           ) {}
}

以上就是我们第一个有趣的JOGL程序。下图是输出,有很多好看的颜色。

当 你看到GLEventListener的实现时,可能会感到不知所措。如果你有用C语言编写OpenGL程序的经验的话,你也许能猜测出一些东西。如果你 觉得比较茫然,不必担心,也不要担心我会让你记住这些东西,至少现在不必。本书接下来的篇幅将会对这个例子中的 SecondGLEventListener作出解释。现在,你只需要试着去猜测。试着去修改代码,产生两行,或者一行斜的,而不是一行水平线;或是让所 有的点都变成蓝色或红色。尽情娱乐,这就是你接下来学习JOGL的方式。
JOGL-实例
   
这就是你接下来的程序。请确保你输入了所有的代码到你的编辑器中。调试这些程序可以快速地使你明白它们的工作原理。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import net.java.games.jogl.*;

/**
* This is a basic JOGL app. Feel free to
* reuse this code or modify it.
* 这是个基础的JOGL程序,你可以随意重用该代码或者修改它。
*/
public class SecondJoglApp extends JFrame {

    public static void main(String[] args) {
       final SecondJoglApp app = new SecondJoglApp();

       //show what we've done
       //看一下我们做了什么
       SwingUtilities.invokeLater (
          new Runnable() {
             public void run() {
                app.setVisible(true);
             }
          }
       );
    }

    public SecondJoglApp() {
       //set the JFrame title
       //设置JFrame标题
       super("Second JOGL Application");

       //kill the process when the JFrame is closed
       //当JFrame关闭的时候,结束进程
       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

       //only three JOGL lines of code ... and here they are
       //只有三行JOGL代码 ... 如下
       GLCapabilities glcaps = new GLCapabilities();
       GLCanvas glcanvas =
          GLDrawableFactory.getFactory().createGLCanvas(glcaps);
       glcanvas.addGLEventListener(new SecondGLEventListener());
      
       //add the GLCanvas just like we would any Component
       //像其它组件一样把GLCanvas加入
       getContentPane().add(glcanvas, BorderLayout.CENTER);
       setSize(500, 300);

       //center the JFrame on the screen
       //使JFrame显示在屏幕中央
       centerWindow(this);
    }

    public void centerWindow(Component frame) {
       Dimension screenSize =
          Toolkit.getDefaultToolkit().getScreenSize();
          Dimension frameSize = frame.getSize();

          if (frameSize.width > screenSize.width )
             frameSize.width = screenSize.width;
          if (frameSize.height > screenSize.height)
             frameSize.height = screenSize.height;
           frame.setLocation (
           (screenSize.width - frameSize.width ) >> 1,
           (screenSize.height - frameSize.height) >> 1
          );
    }
}



请注意这个类对于第一个类所作的改动。改动只有类名、frame名、以及GLEventListener名。希望你能够阅读代码中的注释,否则你会搞不清它要做什么。

我们实现的GLEventListener确实相对于前面一个例子有了一些改进,它允许我们画出一些漂亮的图来。
import net.java.games.jogl.*;

/**
* For our purposes only two of the GLEventListeners matter.
* Those would be init() and display().
* 为了达到我们的目的,GLEventListener中只有两个方法有用。
* 它们是init()和display()。
*/
public class SecondGLEventListener implements GLEventListener
{

    /**
     * Take care of initialization here.
     * 注意这里的初始化。
     */
    public void init(GLDrawable gld) {
       GL gl = gld.getGL();
       GLU glu = gld.getGLU();

       gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

       gl.glViewport(0, 0, 500, 300);
       gl.glMatrixMode(GL.GL_PROJECTION);
       gl.glLoadIdentity();
       glu.gluOrtho2D(0.0, 500.0, 0.0, 300.0);
    }

    /**
     * Take care of drawing here.
     * 注意这里的绘图。
     */
    public void display(GLDrawable drawable) {

       float red = 0.0f;
       float green = 0.0f;
       float blue = 0.0f;

       GL gl = drawable.getGL();

       gl.glClear(GL.GL_COLOR_BUFFER_BIT);

       gl.glPointSize(5.0f);

       for (int i=0; i<50; i++) {

          red -= .09f;
          green -= .12f;
          blue -= .15f;

       if (red < 0.15) red = 1.0f;
       if (green < 0.15) green = 1.0f;
       if (blue < 0.15) blue = 1.0f;

       gl.glColor3f(red, green, blue);

       gl.glBegin(GL.GL_POINTS);
          gl.glVertex2i((i*10), 150);
       gl.glEnd();
    }
}

public void reshape(
                      GLDrawable drawable,
                      int x,
                      int y,
                      int width,
                      int height
                    ) {}
public void displayChanged(
                             GLDrawable drawable,
                             boolean modeChanged,
                             boolean deviceChanged
                           ) {}
}

以上就是我们第一个有趣的JOGL程序。下图是输出,有很多好看的颜色。

当 你看到GLEventListener的实现时,可能会感到不知所措。如果你有用C语言编写OpenGL程序的经验的话,你也许能猜测出一些东西。如果你 觉得比较茫然,不必担心,也不要担心我会让你记住这些东西,至少现在不必。本书接下来的篇幅将会对这个例子中的 SecondGLEventListener作出解释。现在,你只需要试着去猜测。试着去修改代码,产生两行,或者一行斜的,而不是一行水平线;或是让所 有的点都变成蓝色或红色。尽情娱乐,这就是你接下来学习JOGL的方式。
分享到:
评论

相关推荐

    jogl 2.3.2 linux amd64

    "jogl"表明是关于JOGL库,“linux”表示该版本是在Linux操作系统上构建的,而“amd64”意味着它是为64位AMD或Intel处理器设计的。 根据压缩包子文件的文件名称“jogl”,我们可以推断压缩包中可能包含以下组件: 1....

    jogl 教程4合1 Java

    标题"jogl 教程4合1 Java"表明这个压缩包包含了一系列关于JOGL的教程资料,涵盖了JOGL的基础到进阶内容。这四个PDF文件——jogl2.pdf、jogl3.pdf、jogl1v4.pdf、jogl4.pdf,可能分别对应JOGL的不同版本或不同主题的...

    jogl-demos-src.zip_DEMO_jogl_jogl.zip

    标题中的"jogl-demos-src.zip_DEMO_jogl_jogl.zip"表明这是一个关于JOGL(Java OpenGL)的演示源代码压缩包,其中包含了用Java和C++编写的OpenGL示例。JOGL是Java绑定到OpenGL的库,允许开发者在Java平台上使用...

    jogl.rar_JOGL texture_jogl_opengl_opengl java_opengl texture Jav

    基于这些信息,我们可以深入讨论以下几个关于JOGL和OpenGL的知识点: 1. **JOGL简介**:JOGL(Java Bindings for OpenGL)是OpenGL的官方Java绑定,允许Java应用程序直接访问原生的OpenGL库。它通过JNI(Java ...

    jogl-1.1.2-pre-20080523-windows-i586.zip

    关于JOGL的详细知识点包括: 1. **API封装**:JOGL提供了一组Java类和方法,将OpenGL的C语言接口转换为Java语言,使得Java开发者可以方便地调用OpenGL函数。 2. **跨平台**:由于Java的跨平台特性,JOGL也支持在...

    jogl简介,jogl入门例子

    **Jogl简介** Java OpenGL(简称Jogl)是Java平台上的一个开源库,它提供了对OpenGL标准接口的封装,使得Java开发者能够利用OpenGL的强大功能进行3D图形编程。OpenGL是一种广泛应用的图形库,用于在各种操作系统和...

    jogl简单入门例子,15个例子,JOGL1.0,2.0的jar包

    JOGL(Java OpenGL)是Java平台上用于访问OpenGL图形库的官方绑定,允许Java开发者利用OpenGL的强大功能进行3D图形编程。OpenGL是一个跨语言、跨平台的编程接口,用于渲染2D、3D图像,广泛应用于游戏开发、科学可视...

    nehe的jogl与其他jogl教程20121102

    【标题】"nehe的jogl与其他jogl教程20121102" 提供了一套关于Java实现OpenGL图形编程的资源,主要聚焦在JOGL(Java Bindings for OpenGL)框架上。JOGL是Java平台上的一个开源库,它允许开发者使用Java语言直接访问...

    64位jogl包

    标题 "64位jogl包" 提供的信息表明,这是一个专为64位操作系统设计的Java OpenGL绑定库。JOGL,全称为Java Bindings for OpenGL,是Java平台上的一个开源项目,它允许Java开发者直接使用OpenGL标准来创建高性能的...

    jogl-2.1开发相关文件

    《Jogl-2.1开发相关文件详解》 在计算机图形学领域,OpenGL是一个广泛使用的图形库,用于渲染2D和3D图像。而Jogl(Java OpenGL)是Java平台上的一个OpenGL绑定库,它允许Java开发者直接使用OpenGL的功能进行高性能...

    JOGL学习PDF2

    ### JOGL2:《Touring the World》游戏开发与技术解析 #### 一、概述 在探讨《JOGL学习PDF2》中所提及的“JOGL2:Touring the World”这一主题时,我们深入剖析了Java编程环境下的OpenGL(JOGL)应用,通过构建一...

    jogl api,来自官方详细资料

    **Jogl API 深入解析** Jogl (Java OpenGL) 是一个用于Java平台的OpenGL绑定库,它允许Java开发者利用OpenGL的强大功能进行图形处理和3D渲染。OpenGL是一种跨语言、跨平台的编程接口,主要用于渲染2D、3D矢量图形。...

    jogl-1.1.1a-windows-i586.zip

    标题中的"jogl-1.1.1a-windows-i586.zip"指的是JOGL(Java OpenGL)的一个版本,这是针对32位Windows系统的一个软件包。JOGL是Java平台上一个开源项目,它允许Java应用程序直接调用OpenGL图形库,为开发者提供了在...

    jogl-2.0-windows-i586

    【标题】"jogl-2.0-windows-i586" 指的是JOGL(Java OpenGL)的一个特定版本,适用于32位Windows系统。JOGL是Java平台上的一个开源项目,它允许Java应用程序直接调用OpenGL图形库,从而实现高性能的3D图形渲染和计算...

    Java程序中的OpenGL(JOGL学习教程)

    Java 程序中的 OpenGL(JOGL 学习教程) Java 程序中的 OpenGL 是使用 Java 语言开发图形应用程序的重要组件。OpenGL 是一个应用最广泛的图形库,支持所有的流行的平台,且能确保项目能正确部署。JOGL 实现了 Java ...

    JOGL读取png图片

    在Java编程环境中,有时我们需要利用OpenGL图形库进行高级的图形渲染和处理,而JOGL(Java Bindings for OpenGL)就是Java与OpenGL之间的桥梁,它允许Java开发者直接调用OpenGL的函数来实现3D图形和图像操作。...

    jogl入门

    在描述中提到的博文中,作者提供了关于如何配置这些库的指导,这对于初次接触JOGL的人来说是重要的步骤。 2. **依赖管理**:JOGL通常包含多个JAR文件,包括主库、 natives(针对不同操作系统的本地库)和其他辅助库...

    jogl_2.0 64位

    JOGL source code and project information can be found at: https://jogl.dev.java.net/ Numerous answers to common questions can be found on the JOGL forum: http://www.javagaming.org/index.php/board,...

Global site tag (gtag.js) - Google Analytics