Java OpenGL使用的是jogl的库,我因为课程要求就想使用openGL做个游戏出来。这里简单分享一下配置方法。以下会给出64位机和32位机的配置。
资源下载地址,很便宜1个积分
http://download.csdn.net/detail/charchunchiu/9721236
或者直接加我微信搜v17284我免费发你。。。。
jogl配置包括三部分
第一步:
将下载的文件解压到电脑任意目录
然后可以看到有两个jar包,一个zip包和一个dll挂钩文件file。这里需要在电脑环境变量里面设置一下path:
需要在变量值后面加上:
;D:\Program Files\JavaOpenGL\x64\dll;
(注意不要漏掉分号,然后路径是你自己解压的ddl目录,如果你是32位的话就用32位那个文件里面的lib目录)
这样就完成了jogl包到硬件的调用(其实我不是很懂这个原理)
打开你的eclipse,新建项目然后新建一个项目,然后按add external jars,将两个jar包和zip包添加进去:
你也可以自己新建一个user library然后添加进去,这一样的。
然后ctrl+shift+T,输入GLEventListener,再点击attach,选择这个zip文件,以后就可以看到源码了。(这句话是转自
http://blog.csdn.net/sidihuo/article/details/44034465)
然后输入代码测试:
代码转自(http://blog.csdn.net/sidihuo/article/details/44034465)
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();
}
}
}
} “`
结果像这样: