之前用C++/GLUT做了个入门级的OpenGL开发,时间过去很久了,原来的程序也随着我更换硬盘而丢失。C++我
学的不好,近期也不想重新捡起来。现在我用的最多的两门语言就是PHP和Java,昨天偶然在网上看到两个对于
OpenGL的两个Java类绑定,一个是JOGL,一个是LWJGL。此外还有一个基于LWJGL的游戏引擎JME。
JOGL是Sun支持的对于OpenGL的Java类绑定,不过现在看来这个项目已经死了,官网上都下载不到开发包了,我
决定不使用它。
LWJGL全称是Light Weight Java Game Library,即轻量级Java游戏开发库,其中还集成了OpenGL,OpenAL等,
可谓十分强大,且稳定更新。
JME全称是JMonkey Engine,是一个Java游戏引擎,底层基于LWJGL,将来可能会支持JOGL。
现在的问题是在LWJGL和JME中选择一个,对此我对比了它们两个的入门级程序。
首先是LWJGL的:
import org.lwjgl.LWJGLException; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.*; public class Main { public Main() { try { Display.setTitle("Kame"); Display.create(); //Fullscreen,可用 // Display.setFullscreen(true); Display.setDisplayMode(new DisplayMode(800,600)); Display.setVSyncEnabled(true); } catch (LWJGLException e) { e.printStackTrace(); } } public void start() { GL11.glMatrixMode(GL11.GL_PROJECTION); GL11.glLoadIdentity(); GL11.glOrtho(0, 800, 600, 0, 1, -1); GL11.glMatrixMode(GL11.GL_MODELVIEW); while (!Display.isCloseRequested()) { // Clear the screen and depth buffer GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); // set the color of the quad (R,G,B,A) GL11.glColor3f(0.5f,0.5f,0.8f); // draw quad GL11.glBegin(GL11.GL_QUADS); GL11.glVertex2f(100,100); GL11.glVertex2f(100+200,100); GL11.glVertex2f(100+200,100+200); GL11.glVertex2f(100,100+200); GL11.glEnd(); Display.update(); } Display.destroy(); } public static void main(String[] args) { new Main().start(); } }
然后是JME的:
import com.jme3.app.SimpleApplication; import com.jme3.material.Material; import com.jme3.math.Vector3f; import com.jme3.scene.Geometry; import com.jme3.scene.shape.Box; import com.jme3.math.ColorRGBA; public class MainEntry extends SimpleApplication { public static void main(String[] args){ MainEntry app = new MainEntry(); app.start(); } public void simpleInitApp() { Box b = new Box(Vector3f.ZERO, 1, 1, 1); Geometry geom = new Geometry("Box", b); Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); mat.setColor("m_Color", ColorRGBA.Blue); geom.setMaterial(mat); rootNode.attachChild(geom); } }
上面两个例子我都成功编译运行,环境是eclipse。
由于LWJGL的入门程序我给它加入了一个正方形,所以多了约15行代码。
整体来看,LWJGL中用的基本都是OpenGL中的变量和方法,如glBegin等,看起来更像是原生的OpenGL,
这点跟GLUT很像,而JME则是在LWJGL之上又给封装了一层,虽然方便了,但为此还不得不学JME。
而LWJGL呢,自然也得学,只是如果你之前用过OpenGL做开发的话,LWJGL用起来显然更友好些。
还有一点,JME编译后的程序正式运行前都会出现一个JME的设置窗体,而即使能编译成功,程序也时不时地
不能正常运行,终端里倒是会出现显卡、声音设备的一大堆初始化信息,不知怎么回事,所以JME给我的感觉是
不太稳定,且不易控制。
最终,我决定用LWJGL。
转载自http://blog.kiccp.com/341.html