你好,JOGL - Java与OpenGl的绑定
?
?
在这篇文章里,摘录了《学习Java对于OpenGl的绑定》。作者吉恩戴维斯解释了如何开始用Java对于OpenGl的绑定开发图形增强的程序
这些年来,为了创建一个图形增强的程序,从而出售给使用各种不同操作系统的用户,程序员有一个选择——OpenGL。GL代表图形库(graphics library)。OpenGL是SGI(美国图形工作站生产厂商)的注册商标。OpenGL显示了它是一个跨平台的C语言编程API。但是事实上,在编程接口上,它是一个与硬件无关的规范。
OpenGL是用来制图的,速度非常快。大多数场合下,它是硬件加速的。看起来好像OpenGL可以实现一切你想要完成的图形界面。
不幸的是,OpenGL是为C语言而写的。不得不承认,C语言不是用来编写复杂应用程序的流行语言。关于OpenGL一个最大的缺点就是:如果你不创建一个窗口(用来把你的图形放入其中),你就什么都做不了。但是OpenGL没有提供给你创建窗口的方法。这使得OpenGL对于初学者来说显得比较难。
幸运地是,出现了GLUT (OpenGL Utility Toolkit)(OpenGL工具包)。它被用来轻松应对窗口、按钮以及用户事件。尽管如此,对于想要使用面向对象的编程的程序员来说,学习用C或者C++来编写OpenGL程序仍然是一件痛苦的事。
?
?
?
然后出现了JOGL
Java也许是最流行的真正的面向对象的编程语言。有许多用Java去结合OpenGL的尝试,但是第一个被大家认可并注意的是Java对于OpenGl的绑定(Java Bindings for OpenGL), 或者称为JOGL。理由是它得到Sun(Java的创建者)和SGI(OpenGL的创建者)的支持。
如今,Sun的游戏开发小组正在开发JOGL。它是以肯·拉塞尔和克里斯·克兰开发的Jungle开始的。拉塞尔是Sun的员工,研发“HotSpot虚拟机”,拥有多年的三维经验。克兰则研发“荒谬的游戏”,对三维图形学也相当有经验。
我个人对他们以及所有其它工作在JOGL上的人表示感谢。曾经有许多想通过友好的Java API来使用OpenGL的尝试——其中包括Java 3D, OpenGL for Java Technology (gl4java)(用于Java技术的OpenGL),Lightweight Java Game Library (LWJGL)(轻量级的Java游戏库)。JOGL是第一个使我感到满意的。
JOGL是Sun支持的对于OpenGl的Java类绑定。哇!这句话说得太妙了。
OpenGL被用来展示三维模型。它强大、快速,而且可能是自Swing出现以来最棒的一样东西。通过JOGL来使用OpenGL,你可以制作出很酷的游戏或是模型位置什么的,而在这之前创建它们需要非常昂贵的成本。有人写了很厚很厚的书来描述OpenGL,当你熟悉了它们以后这些书会很有用,但现在不行。你必须学习展现在你面前的OpenGL是如何使用Java API的。同样你还得看一下关于net.java.games.jogl.*的基础介绍,可能还得补习一下数学知识。
获取JOGL?
如果你想使用JOGL,你需要得到jogl.jar以及附带的本机代码。我希望有一天它可以成为Java的标准安装,但现在它只是一个梦想。
第一步是要找到你的操作系统所对应的包,并进行解压缩。我是在http://www.javaworld.com/javaworld/jw-02-2005/jw-0221-jogl.html#resources上找到的。不同的操作系统有所区别,但需要安装2个部分。系统的classpath里一定要有jogl.jar,而且binary库必须放在和你操作系统的库同一个地方。如果比较幸运的话,安装程序可以为你完成这些。如果你没有安装程序而且不知道该上哪里去寻找关于设置计算机的信息的话,你可以从我提供一个链接Resources开始搜索。我们的第一篇代码是特别用来测试环境是否安装正确的,所以对于测试安装你不必紧张。
JOGL的Javadocs
同样可以在和JOGL 的binary 发布版一样的位置获得Javadocs。Javadocs将会以类似jogl-1.0-usrdoc.tar的名字而命名。
如果你浏览一下net.java.games.jogl包,你很快会注意到有些类非常大。GL便是一个完美的例子。别被这个吓跑了,你很快能发现只需一点点JOGL的知识,你就可以完成一些相当复杂的事了。现在你需要扫视一下的类有:
*GLDrawable?
*GLCanvas?
*GLJPanel?
*GLCapabilities?
*GLDrawableFactory
这些是连接图形世界基本的接口。如果你还记得,前面我提到对于初学OpenGL的人来说,有一个很大的缺点,那就是缺乏窗口系统的标准。对应于C语言,GLUT起到了相当大的作用。而我们则有Swing和AWT(抽象窗口工具箱)。很可能你已经使用过AWT或者Swing了,所以你不会感到自己在从头学起。这是件非常好的事情。在通过了非常简短的关于把JOGL组件放置到屏幕上的介绍以后,我们不需要多长时间就可以运行出一个相当酷而且流行的程序了。
?
?
?
?
GlueGen...几乎和JOGL一样酷?
这个程序运行起来可能会根据你的操作系统显得有点乱七八糟。这是预料之中的,因为你在这里只是往屏幕上显示随机的内存。所以恭喜你具有了图形创新的才能了。
准备实战
当你熟悉了前面的例子以后,我们来画一张漂亮的图。
这就是你接下来的程序。请确保你输入了所有的代码到你的编辑器中。调试这些程序可以快速地使你明白它们的工作原理。?
?
以上就是我们第一个有趣的JOGL程序。下图是输出,有很多好看的颜色。
当你看到GLEventListener的实现时,可能会感到不知所措。如果你有用C语言编写OpenGL程序的经验的话,你也许能猜测出一些东西。如果你觉得比较茫然,不必担心,也不要担心我会让你记住这些东西,至少现在不必。本书接下来的篇幅将会对这个例子中的SecondGLEventListener作出解释。现在,你只需要试着去猜测。试着去修改代码,产生两行,或者一行斜的,而不是一行水平线;或是让所有的点都变成蓝色或红色。尽情娱乐,这就是你接下来学习JOGL的方式。
资源
Matrix JAVA社区:http://www.matrix.org.cn
这篇文章,摘录了《学习Java对于OpenGl的绑定》一书的第一章“你好,JOGL”。吉恩·戴维斯(2004):http://www.genedavissoftware.com/books/jogl/
JOGL项目: https://jogl.dev.java.net/?
JOGL用户指南: https://jogl.dev.java.net/nonav/source/browse/*checkout*
/jogl/doc/userguide/index.html?rev=HEAD&content-type=text/html?
预编译代码: https://games-binaries.dev.java.net/build/index.html?
JOGL演示: https://jogl-demos.dev.java.net/