JAVA的OPENGL,JOGL入门例子----碰撞移动的正方体
2012-11-22 11:15
246 查看
第一步:到https://jogl.dev.java.net/ 下载 jogl-1.1.2-pre-20080523-windows-i586.zip
解压缩到随意文件夹里,如:C:/Program Files/Java/jogl-1.1.2-pre-20080523-windows-i586
打开eclipse, 点FILE-->new--->project--->project name 随意写如:My_opengl----FINISH
建立项目以后在左边Workspace里找到刚新建的项目
如:My_opengl,鼠标右键-->properties-->Java Build Path 选 libraries--->Add External JARs
找到原解压缩文件夹 如:C:/Program Files/Java/jogl-1.1.2-pre-20080523-windows-i586
在里面找到lib,打开--->双击jogl.jar和gluegen-rt.jar 把这2个JAR包添加到我们的 libraries
这时能在libraries里看到jogl.jar和gluegen-rt.jar 两包,选jogl.jar,
---> Native library location:---->Edit--->External Folder
-->选择C:/Program Files/Java/jogl-1.1.2-pre-20080523-windows-i586/lib
这样配置就完成了。
在My_opengl项目里,新建一个CLASS,CLASS NAME:Opengl_Bounce
先Ctrl+C复制下面代码到CLASS里,
先不谈Runnable接口,这是个多线程接口,
我们直接看到上面代码里我们 implements GLEventListener ,这用于声明一个客户端代码管理OpenGL渲染的事件.
GLEventListener 接口里有4个方法必须被重写(当然不是让你重新写一次,eclipse会自动提示你加载这些方法):
转自:/article/9279727.html
解压缩到随意文件夹里,如:C:/Program Files/Java/jogl-1.1.2-pre-20080523-windows-i586
打开eclipse, 点FILE-->new--->project--->project name 随意写如:My_opengl----FINISH
建立项目以后在左边Workspace里找到刚新建的项目
如:My_opengl,鼠标右键-->properties-->Java Build Path 选 libraries--->Add External JARs
找到原解压缩文件夹 如:C:/Program Files/Java/jogl-1.1.2-pre-20080523-windows-i586
在里面找到lib,打开--->双击jogl.jar和gluegen-rt.jar 把这2个JAR包添加到我们的 libraries
这时能在libraries里看到jogl.jar和gluegen-rt.jar 两包,选jogl.jar,
---> Native library location:---->Edit--->External Folder
-->选择C:/Program Files/Java/jogl-1.1.2-pre-20080523-windows-i586/lib
这样配置就完成了。
在My_opengl项目里,新建一个CLASS,CLASS NAME:Opengl_Bounce
先Ctrl+C复制下面代码到CLASS里,
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 { this.capabilities = new GLCapabilities(); //实例化capabilities this.glcanvas = new GLCanvas(capabilities); //实例化glcanvas this.glcanvas.addGLEventListener(this); //给glcanvas添加GL事件处理 this.add(glcanvas, BorderLayout.CENTER); //给窗体添加一个Component:glcanvas this.addWindowListener(new WindowAdapter() { //给窗体添加关闭事件 public void windowClosing(WindowEvent e) { System.exit(0); } }); myThread.start(); //主线程开始 } public static void main(String[] args) { Opengl_Bounce f = new Opengl_Bounce(); f.setTitle("移动的矩型"); f.setSize(800, 600); f.setVisible(true); } public void display(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(); } public void displayChanged(GLAutoDrawable drawable, boolean arg1, boolean arg2) { } public void init(GLAutoDrawable drawable) { gl = drawable.getGL(); gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f); } public void reshape(GLAutoDrawable drawable, int x, int y, 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) { this.windowWidth = 250.0f; this.windowHeight = 250.0f * h / w; } else { this.windowWidth = 250.0f * w / h; this.windowHeight = 250.0f; } gl.glOrtho(0.0f, windowWidth, 0.0f, windowHeight, 1.0f, -1.0f); gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); } public void run() { while (true) { glcanvas.display(); //主线程不停调用display() try { myThread.sleep(20); //每执行完一次休息20毫秒 } catch (InterruptedException ex) { ex.printStackTrace(); } } } }
先不谈Runnable接口,这是个多线程接口,
我们直接看到上面代码里我们 implements GLEventListener ,这用于声明一个客户端代码管理OpenGL渲染的事件.
GLEventListener 接口里有4个方法必须被重写(当然不是让你重新写一次,eclipse会自动提示你加载这些方法):
public void init(GLAutoDrawable drawable) 程序初试化时被调用 public void display(GLAutoDrawable drawable) //作为画图的动作被调用,也就是主画图函数 { if (x1 > windowWidth - rsize || x1 < 0) { 当矩型的X坐标大于视图的最右边或小于0时,沿X移动方向取反 } public void displayChanged(GLAutoDrawable drawable, boolean arg1,boolean arg2) //当DisplayMode被改变的时候自动被调用 public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) { } //当屏幕尺寸发生改变的时候调用,一开始就会至少会被调用一次. 最终效果 xstep = -xstep; } if (y1 > windowHeight - rsize || y1 < 0) { 当矩型的y坐标大于视觉的最右边或小于0时,沿Y移动方向取反 ystep = -ystep; } if (x1 > windowWidth - rsize) { 当矩型的X坐标到达视图的最右边,先停止 x1 = windowWidth - rsize; } if (y1 > windowHeight - rsize) { 当矩型的Y坐标到达视图的最右边,先停止 y1 = windowHeight - rsize; } x1 += xstep; 沿X坐标执行的位移距离 y1 += ystep; 沿Y坐标执行的位移距离 gl.glClear(GL.GL_COLOR_BUFFER_BIT); 在init()中曾把背景色设为蓝,在这里还要实际清除一下 gl.glColor3f(1.0f, 0.0f, 0.0f); 设置画笔颜色为红 gl.glRectf(x1, y1, x1 + rsize, y1 + rsize); 画矩型,坐标为(x1,y1) gl.glFlush(); 刷新 glcanvas.swapBuffers(); 更新前景缓冲和背景缓冲 { gl = drawable.getGL(); 用drawable设备获取到GL接口,这句为必须,否则报错 gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f); 把当前背景清除颜色设为蓝RGB(0,0,1),之前系统默认为黑 }
转自:/article/9279727.html
相关文章推荐
- JAVA的OPENGL,JOGL入门例子----碰撞移动的正方体
- JAVA的OPENGL,JOGL入门实例----碰撞移动的正方体 (配置+源代码)
- JAVA的OPENGL,JOGL入门例子----不断变色的点阵(2D)
- JAVA的OPENGL,JOGL入门例子(二)-----不断变色的点阵(2D)
- JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
- JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
- java 多线程 例子 入门博文一
- 你好,JOGL-Java与OpenGl的绑定
- spark入门cogroup简单例子(JAVA)
- JOGL - Java与OpenGl的绑定(转)
- JavaBean入门 - 概念和简单例子
- spark入门cogroup简单例子(JAVA)
- HBase入门篇2-Java操作HBase例子
- OpenGL入门系列6 - 累积缓冲区用法例子
- 【移动开发】Android游戏开发SurfaceView应用----手指发动小球(小球碰撞检测例子)
- 移动视频: QuickTime for Java API 入门
- 基于Java的移动游戏开发入门-Java基础-Java-编程开发
- spark入门cogroup简单例子(JAVA)
- Java编写CORBA的一个简单例子(CORBA入门)
- opengl入门系列- openglES 2.0 的 VBO 用法和例子