JAVA的OPENGL,JOGL入门实例----碰撞移动的正方体 (配置+源代码)

本文主要是介绍JAVA的OPENGL,JOGL入门实例----碰撞移动的正方体 (配置+源代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我的配置方法:

下载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(); // 实例化capabilitiesglcanvas = new GLCanvas(capabilities); // 实例化glcanvasglcanvas.addGLEventListener(this); // 给glcanvas添加GL事件处理this.add(glcanvas, BorderLayout.CENTER); // 给窗体添加一个Component:glcanvasaddWindowListener(new WindowAdapter() { // 给窗体添加关闭事件@Overridepublic 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);}@Overridepublic 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();}@Overridepublic void displayChanged(final GLAutoDrawable drawable, final boolean arg1,final boolean arg2) {}@Overridepublic void init(final GLAutoDrawable drawable) {gl = drawable.getGL();gl.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);}@Overridepublic 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();}@Overridepublic void run() {while (true) {glcanvas.display(); // 主线程不停调用display()try {myThread.sleep(20); // 每执行完一次休息20毫秒} catch (final InterruptedException ex) {ex.printStackTrace();}}}}


ok了!



这篇关于JAVA的OPENGL,JOGL入门实例----碰撞移动的正方体 (配置+源代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/493450

相关文章

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Python Transformer 库安装配置及使用方法

《PythonTransformer库安装配置及使用方法》HuggingFaceTransformers是自然语言处理(NLP)领域最流行的开源库之一,支持基于Transformer架构的预训练模... 目录python 中的 Transformer 库及使用方法一、库的概述二、安装与配置三、基础使用:Pi

SpringBoot条件注解核心作用与使用场景详解

《SpringBoot条件注解核心作用与使用场景详解》SpringBoot的条件注解为开发者提供了强大的动态配置能力,理解其原理和适用场景是构建灵活、可扩展应用的关键,本文将系统梳理所有常用的条件注... 目录引言一、条件注解的核心机制二、SpringBoot内置条件注解详解1、@ConditionalOn

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Spring LDAP目录服务的使用示例

《SpringLDAP目录服务的使用示例》本文主要介绍了SpringLDAP目录服务的使用示例... 目录引言一、Spring LDAP基础二、LdapTemplate详解三、LDAP对象映射四、基本LDAP操作4.1 查询操作4.2 添加操作4.3 修改操作4.4 删除操作五、认证与授权六、高级特性与最佳

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与