JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)
原文:http://blog.csdn.net/sidihuo/article/details/44035015
第一个类(代码解读)
- package test1.opengl;
- import java.awt.BorderLayout;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.HeadlessException;
- import java.awt.Toolkit;
- import javax.media.opengl.GLCanvas;
- import javax.media.opengl.GLCapabilities;
- import javax.swing.JFrame;
- import javax.swing.SwingUtilities;
- import com.sun.opengl.util.Animator;
- import com.sun.opengl.util.FPSAnimator;
- public class SecondJoglApp extends JFrame {
- public static Animator animator = null;
- public GLCanvas canvas = null;
- public SecondJoglApp() throws HeadlessException {
- super("第二个JOGL");
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- // 初始化GLCapabilities
- final GLCapabilities glcaps = new GLCapabilities();
- canvas = new GLCanvas(glcaps); // 初试化GLcanvas,用法参照第一章
- canvas.addGLEventListener(new SecondGLEventListener()); // GLcanvas添加GLEventListener
- getContentPane().add(canvas, BorderLayout.CENTER); // 给窗体panel添加GLcanvas
- animator = new FPSAnimator(canvas, 10, true); // 本章重点,给canvas添加动画线程,每秒10帧
- setSize(500, 300);
- centerWindow(this);
- }
- public void centerWindow(final Component frame) { // 把窗体居中
- final Dimension screenSize =
- Toolkit.getDefaultToolkit().getScreenSize();
- final Dimension frameSize = frame.getSize();
- if (frameSize.width > screenSize.width) {
- frameSize.width = screenSize.width;
- }
- if (frameSize.height > screenSize.height) {
- frameSize.height = screenSize.height;
- }
- frame.setLocation(
- screenSize.width - frameSize.width >> 1,
- screenSize.height - frameSize.height >> 1
- );
- }
- public static void main(final String[] args) {
- // TODO Auto-generated method stub
- final SecondJoglApp app = new SecondJoglApp();
- // 显示窗体
- SwingUtilities.invokeLater(
- new Runnable() {
- @Override
- public void run() {
- app.setVisible(true);
- }
- }
- );
- SwingUtilities.invokeLater(
- new Runnable() {
- @Override
- public void run() {
- animator.start(); // 开始动画线程
- }
- }
- );
- }
- }
第二个类
- package test1.opengl;
- import javax.media.opengl.GL;
- import javax.media.opengl.GLAutoDrawable;
- import javax.media.opengl.GLEventListener;
- import javax.media.opengl.glu.GLU;
- public class SecondGLEventListener implements GLEventListener {
- public SecondGLEventListener() {
- // TODO Auto-generated constructor stub
- }
- @Override
- public void display(final GLAutoDrawable arg0) { // 画图函数
- // TODO Auto-generated method stub
- float red = (float) (Math.random() * 1.0f); // 随机红
- float green = (float) (Math.random() * 1.0f); // 随机绿
- float blue = (float) (Math.random() * 1.0f); // 随机蓝
- final GL gl = arg0.getGL(); // 从GLAutoDrawable获取GL
- gl.glClear(GL.GL_COLOR_BUFFER_BIT); // 填充背景颜色
- gl.glPointSize(5.0f); // 设置点的大小
- for (int i = 0; i < 50; i++) { // 画点
- red -= .09f; // 红色值递减
- green -= .12f; // 绿色值递减
- blue -= .15f; // 蓝色值递减
- if (red < 0.15) {
- red = 1.0f;
- }
- if (green < 0.15) {
- green = 1.0f;
- }
- if (blue < 0.15) {
- blue = 1.0f;
- }
- gl.glColor3f(red, green, blue); // 设置GL的画图颜色,也就是画刷的颜色
- gl.glBegin(GL.GL_POINTS);
- gl.glVertex2i(i * 10, 150); // 画点由glBegin(GL.GL_POINTS)开始,glEnd()结束
- gl.glEnd();
- }
- }
- @Override
- public void displayChanged(final GLAutoDrawable arg0, final boolean arg1, final boolean arg2) {
- // TODO Auto-generated method stub
- }
- @Override
- public void init(final GLAutoDrawable gld) { // 初始函数
- // TODO Auto-generated method stub
- final GL gl = gld.getGL();
- final GLU glu = new GLU();
- gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 设置背景颜色
- gl.glViewport(0, 0, 500, 300); // 视点大小
- gl.glMatrixMode(GL.GL_PROJECTION);
- gl.glLoadIdentity();
- glu.gluOrtho2D(0.0, 500.0, 0.0, 300.0); // 使坐标系统出现在GL里
- }
- @Override
- public void reshape(final GLAutoDrawable arg0, final int arg1, final int arg2, final int arg3,
- final int arg4) {
- // TODO Auto-generated method stub
- }
- }
JAVA的OPENGL,JOGL入门实例----不断变色的点阵 (源代码)相关推荐
- java 消息机制 ActiveMQ入门实例
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt180 1.下载ActiveMQ 去官方网站下载:http://active ...
- java jna 例子_JNA入门实例
JNI是Java调用原生函数的唯一机制,JNA就是建立在JNI之上,JNA简化了Java调用原生函数的过程.JNA提供了一个动态的C语言编写的转发器(实际上也是一个动态链接库,在Linux-i386中 ...
- Java操作Excel表格入门实例
算法学累了 换个知识学一下 这次算是复习 首先 操作表格需要用到第三方的库 Java本身没有 需要引入类库 如果你会使用Maven 那么直接导入刷新就行 <dependency><g ...
- java onkeydown_JavaScript onkeydown事件入门实例(键盘某个按键被按下)
JavaScript onkeydown 事件 用户按下一个键盘按键时会触发 onkeydown 事件.与 onkeypress事件不同的是,onkeydown 事件是响应任意键按下的处理(包括功能键 ...
- JOGL java调用openGL
JOGL java调用openGL JOGL java调用openGL JOGL java调用openGL JOGL java调用openGL http://download.java ...
- JOGL - Java与OpenGl的绑定(转)
JOGL - Java与OpenGl的绑定 默认分类 2009-11-22 20:31:05 阅读4 评论0 字号:大中小 在这篇文章里,摘录了<学习Java对于OpenGl的绑定>.作者 ...
- Java Socket入门实例
基于测试驱动的Socket入门实例(代码的具体功能可以看我的程序中的注释,不理解的可以短信我) 先看Server的代码: package socketStudy; import java.io.Buf ...
- java rmi 入门实例
java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础 java rmi即java远程接口调用,实现了2台虚拟机之间的 ...
- java对opengl绑定_你好,JOGL - Java与OpenGl的绑定-Java频道-中国IT实验室
然后出现了JOGL 也许是最流行的真正的面向对象的编程语言.有许多用去结合OpenGL的尝试,但是第一个被大家认可并注意的是Java对于OpenGl的绑定(Java Bindings for Open ...
最新文章
- Linux下快速安装TensorFlow的教程
- opencv学习笔记3:像素处理
- 【数据结构与算法】之深入解析“通配符匹配”的求解思路与算法示例
- 用盛金公式求解一元三次方程
- AlphaFold2开源了,不是土豪也不会编程的你怎么蹭一波?
- DNS无法解析IP_通过YouTube的封杀窥视DNS原理
- 惠普战66拆机加固态_惠普战66测评:想要提高办公效率,惠普是你的品质之选...
- 信号与线性系统分析(吴大正,郭宝龙)(2-冲激函数)
- 汇编语言笔记-ARM架构指令集
- 计算机产品校园营销方案,惠普笔记本电脑校园营销策划方案.doc
- 【汇编语言】第三章 寄存器(内存访问)
- 十进制转二进制,短除法与位运算两种方法
- 无法加载SQLite.Interop.dll:找不到指定模块
- Spliterator
- Amazon亚马逊卖家设置World First(WF卡)收款教程!
- matlab模糊控制图怎么导出_matlab模糊控制工具箱的使用
- 简单好用的树莓派磁盘空间管理工具
- sql的左连接,右连接,内连接
- 2016国内热门的企业级SaaS应用
- 中国第一份OA系统用户实名口碑选型报告(选型宝重磅发布!)
热门文章
- java jdwp如何关闭_蚀-本机方法中的致命错误:JDWP没有初始化传输,jvmtiError = AGENT_ERROR_TRANSPORT_INIT(197)...
- 眼图在通信系统中有什么意义_悟空CRM:施行CRM系统对汽车行业有什么意义
- n个数求和 java_暴力+辗转相除法——N个数求和
- 世界人口钟实时数据_中美面积人口数据对比,2020年8月,值得了解的细节
- 皮一皮:充实的一天...
- 千万微信红包封面领取攻略,抢到你吐
- 每日一皮:单身狗的悲哀...
- Java开发中Websocket的技术选型参考
- 开源:推荐一个不错的离线IP地址定位库
- 1024 大促书单丨神券在手,快乐我有