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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

MySQL数据库双机热备的配置方法详解

《MySQL数据库双机热备的配置方法详解》在企业级应用中,数据库的高可用性和数据的安全性是至关重要的,MySQL作为最流行的开源关系型数据库管理系统之一,提供了多种方式来实现高可用性,其中双机热备(M... 目录1. 环境准备1.1 安装mysql1.2 配置MySQL1.2.1 主服务器配置1.2.2 从

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Linux云服务器手动配置DNS的方法步骤

《Linux云服务器手动配置DNS的方法步骤》在Linux云服务器上手动配置DNS(域名系统)是确保服务器能够正常解析域名的重要步骤,以下是详细的配置方法,包括系统文件的修改和常见问题的解决方案,需要... 目录1. 为什么需要手动配置 DNS?2. 手动配置 DNS 的方法方法 1:修改 /etc/res