2008年(3500)
分类:
2008-05-04 23:25:33
上个学期的一门课程中,我在一个项目中使用了OpenGL。我们的教授让我们写一段3D物体的程序——能画出3D物品的细节,设置它的属性并能够放大,运动,旋转,组合并复制。我们甚至不能使用更高层次的类库比如Java3D,老头要我们只能使用OpenGL。这可有些麻烦,不过还好我有NetBeans。哈,它再一次让事情变得轻松起来。
如果你不够谨慎,一段OpenGL的代码很容易变得复杂起来。里面有太多的设置,变量,矩阵,转换等等,少许的一些细节就可以让事情变得糟糕,可能你还没有意识到。所以,有一个好的IDE将会帮助你很多。
另一个因素是,我喜欢使用java来编写OpenGL的代码。在所有的其他语言里,你需要使用回调函数来执行openGL.比如在python中,你必须创建一个display()函数来将物体显示在屏幕上。
def display(): “Draw a triangle” glClear(GL_COLOR_BUFFER_BIT) “Set Color” glColor3f (1.0, 1.0, 1.0) glBegin(GL_TRIANGLES); glVertex3f(0.0, 1.0, 0.0); glVertex3f(-1.0, -1.0, 0.0); glVertex3f(1.0, -1.0, 0.0); // Finished Drawing The Triangle glEnd(); glutSwapBuffers()
然后告诉OpenGL display()关注屏幕显示。调用:
glutDisplayFunc(display)
而在java中不需要这样的回调。只需要使用接口方式就能实现,这样使得代码更容易被理解。我的项目中sphere类继承shape类并实现了Drawable接口。openGL的函数,例如display(),init(),reshape()可以在实现了GLEventListener的类中实现。
//Draw a triangle public void display(GLAutoDrawable drawable) { GL gl = drawable.getGL(); // Clear the drawing area gl.glClear(GL.GL_COLOR_BUFFER_BIT); gl.glBegin(GL.GL_TRIANGLES); gl.glVertex3f(0.0f, 1.0f, 0.0f); // Top gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left gl.glVertex3f(1.0f, -1.0f, 0.0f); // Bottom Right // Finished Drawing The Triangle gl.glEnd(); // Flush all drawing operations to the graphics card gl.glFlush(); }
这贴不是来介绍openGL的。这里有关于使用netBeans6.0的openGL插件的教程
让我们开始在NetBeans6.0.1上JavaOpenGL的开发之路吧
第一步下载插件,可以在这里找到
添加插件完成后,重启netBeans,在file->new project中可以看到openGl工程了
你可能会想要看下自带的demo。插件里有许多JOGL的demo和红宝书的Demo。如果你是通过读红宝书学习OpenGL的,你可以看到书中的例子。
非常有意思的一点,OpenGL Panel和OpenGL Canvas都已经和Matisse系统集成了。所以你可以在你的GUI中使用Matisse并把OpenGL元素
下载本文示例代码