我的配置方法:
下载jogl-1.1.1a-windows-i586.zip,(链接失效的话可以到qq群336280109里群文件共享下载)(http://download.java.net/media/jogl/builds/archive/jsr-231-1.1.1a/)解压后找出lib中的四个dll文件,复制到C盘windows/system32下面(其实放在PATH环境变量里面的任一个文件夹下都是可以的),然后在工程新建文件夹lib,把解压得到的两个jar复制到新建的lib,然后build path。
在上面的网址中下载jogl-1.1.1a-src.zip ,把这个zip也复制到工程新建的lib中,然后ctrl+shift+T,输入GLEventListener,再点击attach,选择这个zip文件,以后就可以看到源码了。
import javax.media.opengl.GLCapabilities;
public class HelloWorld {
public static void main(final String args[]) {
try {
System.loadLibrary("jogl");
System.out.println("Hello World!(Thenativelibrariesareinstalled.)");
final GLCapabilities caps = new GLCapabilities();
System.out.println("Hello JOGL!(Thejarappearstobeavailable.)");
} catch (final Exception e) {
System.out.println(e);
}
}
}
然后按照上面的测试代码测试。
实例源代码:http://blog.csdn.net/xxyy888/article/details/8211380
package test1.opengl;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.HeadlessException;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
public class Opengl_Bounce extends Frame implements GLEventListener, Runnable {
float x1 = 100.0f; // 矩型的X坐标
float y1 = 150.0f; // 矩型的y坐标
long rsize = 50; // 为矩型宽度预留的位置或距离
float xstep = 1.0f; // 沿X每步位移的距离,当然可以改大些
float ystep = 1.0f; // 沿Y每步位移的距离
float windowWidth; // 这里不是指窗体边框的的宽,而是视觉投影的右端
float windowHeight; // 这里不是指窗体边框的的高,而是视觉投影的顶端
GL gl; // OPENGL的主接口
GLCanvas glcanvas; // 类似java.awt.Canvas, GLCanvas主要用来显示各种OPENGL的效果
GLCapabilities capabilities; // 指定了一套OpenGL的功能:渲染内容必须支持,如色彩深度,以及立体是否已启用。
Thread myThread = new Thread(this);
public Opengl_Bounce() throws HeadlessException {
capabilities = new GLCapabilities(); // 实例化capabilities
glcanvas = new GLCanvas(capabilities); // 实例化glcanvas
glcanvas.addGLEventListener(this); // 给glcanvas添加GL事件处理
this.add(glcanvas, BorderLayout.CENTER); // 给窗体添加一个Component:glcanvas
addWindowListener(new WindowAdapter() { // 给窗体添加关闭事件
@Override
public void windowClosing(final WindowEvent e) {
System.exit(0);
}
});
myThread.start(); // 主线程开始
}
public static void main(final String[] args) {
final Opengl_Bounce f = new Opengl_Bounce();
f.setTitle("移动的矩型");
f.setSize(800, 600);
f.setVisible(true);
}
@Override
public void display(final GLAutoDrawable drawable) {
if (x1 > windowWidth - rsize || x1 < 0) {
xstep = -xstep;
}
if (y1 > windowHeight - rsize || y1 < 0) {
ystep = -ystep;
}
if (x1 > windowWidth - rsize) {
x1 = windowWidth - rsize;
}
if (y1 > windowHeight - rsize) {
y1 = windowHeight - rsize;
}
x1 += xstep;
y1 += ystep;
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glColor3f(1.0f, 0.0f, 0.0f);
gl.glRectf(x1, y1, x1 + rsize, y1 + rsize);
gl.glFlush();
glcanvas.swapBuffers();
}
@Override
public void displayChanged(final GLAutoDrawable drawable, final boolean arg1,
final boolean arg2) {
}
@Override
public void init(final GLAutoDrawable drawable) {
gl = drawable.getGL();
gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
}
@Override
public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int w, int h) {
if (h == 0) {
h = 1;
}
gl.glViewport(0, 0, w, h);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
if (w <= h) {
windowWidth = 250.0f;
windowHeight = 250.0f * h / w;
} else {
windowWidth = 250.0f * w / h;
windowHeight = 250.0f;
}
gl.glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
}
@Override
public void run() {
while (true) {
glcanvas.display(); // 主线程不停调用display()
try {
myThread.sleep(20); // 每执行完一次休息20毫秒
} catch (final InterruptedException ex) {
ex.printStackTrace();
}
}
}
}
ok了!