`
沙舟狼客
  • 浏览: 161660 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jogl入门

阅读更多

1、jogl是什么?

jogl是Java OpenGL的简称,想真正的了解它,就需要了解OpenGL,OpenGL是Open Graphics Library,它是个定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库,请参考http://baike.baidu.com/view/9222.htm,他其实是一个命令的的集合,300多条,算不上编程语言,他最难的在于计算机图形学的知识,而jogl是用java通过jni调用,对openGL的一个封装,所以速度上并不比c慢多少,并且加上java特有的面向对象的特性,来开发游戏比直接用c有过之而无不及!

2、jogl的安装配置;

下载地址:如果去官方下载,就直接在他的svn中checkout下来,去里面的项目找, http://jogl .dev.java.net,

 为了方便我直接上传了一份;

eclipse下配置:jar包放在build-path下,dll文件,可以在项目下建立个native文件夹,把jogl.jar的NativeLibraryLocation位置选中native就行了

3、验证配置,可以用下面代码

public class Validate {

	public static void main(String[] args) {
		try {
			System.loadLibrary("jogl");
			System.out.println("正确配置");
		} catch (Exception e) {
			System.out.println("没有正确配置:" + e.getMessage());
		}

	}

}

 没有正确配置的话会有下面异常

Exception in thread "main" java.lang.UnsatisfiedLinkError: no jogl in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
	at java.lang.Runtime.loadLibrary0(Runtime.java:823)
	at java.lang.System.loadLibrary(System.java:1030)
	at org.ligson.jogl.test.Validate.main(Validate.java:7)

 4、OpenGL开发前需要知道的

OpenGL为了兼容各种环境,没有实现窗口,但是他画图又必须在窗口下画,在C库中依赖于glut,在Java中就依赖于swing了,所以第一步应该建立一个窗口extends JFrame,

5、先看一个Hello,World!

package org.ligson.jogl.test;

import java.awt.BorderLayout;
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;
import javax.swing.JFrame;

public class Pointer extends JFrame implements GLEventListener, Runnable {

	// gl库的handler,相当于画笔
	GL gl;
	// 画布,跟html5的Canvas一样,
	GLCanvas canvas;
	// 指定了一套OpenGL的功能:渲染内容必须支持,如色彩深度,以及立体是否已启用。
	GLCapabilities capabilities;

	Thread thread = new Thread(this);


	public Pointer() {
		super("Demo4");
		this.setSize(500, 500);
		this.setLocationRelativeTo(null);

		capabilities = new GLCapabilities();
		canvas = new GLCanvas(capabilities);

		canvas.addGLEventListener(this);

		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});

		this.add(canvas, BorderLayout.CENTER);

		thread.start();
	}

	@Override
	public void run() {
		while (true) {
			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			canvas.display();
		}
	}

	@Override
	public void display(GLAutoDrawable drawable) {
		gl.glClear(GL.GL_COLOR_BUFFER_BIT);
		gl.glColor3f(1.0f, 0.0f, 0.0f);

		gl.glPointSize(10.0f);
		gl.glBegin(GL.GL_POINTS);
			gl.glVertex3f(50.0f, 50.0f, 50.0f);
		gl.glEnd();
		gl.glFlush();
	}

	@Override
	public void displayChanged(GLAutoDrawable drawable, boolean arg1,
			boolean arg2) {

	}

	@Override
	public void init(GLAutoDrawable drawable) {
		gl = drawable.getGL();
		gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f);
	}

	@Override
	public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
		if (h == 0) {
			h = 1;
		}

		int windowWidth;
		int windowHeight;

		gl.glViewport(0, 0, w, h);
		gl.glMatrixMode(GL.GL_PROJECTION);
		gl.glLoadIdentity();

		if (w <= h) {
			windowWidth = 250;
			windowHeight = 250 * h / w;
		} else {
			windowWidth = 250 * w / h;
			windowHeight = 250;
		}
		gl.glOrtho(0 - windowWidth, windowWidth, 0 - windowHeight,
				windowHeight, 250.0f, -250.0f);
		gl.glMatrixMode(GL.GL_MODELVIEW);
		gl.glLoadIdentity();

	}

	public static void main(String[] args) {
		Pointer demo5 = new Pointer();
		demo5.setVisible(true);
	}

}

 6、上面的hello,world吓住你了吗?太长了吧,我刚开始跟你一样!先说上面是干嘛的?他其实就是先空间画一个10.0f像素的点(glPonitSize(10.0f));了解几个函数

public void init(GLAutoDrawable drawable) {

初始化时调用,给GL 赋值

@Override
	public void display(GLAutoDrawable drawable) {

每次显示时都会调用的,他一般在一个线程里,不停的画,因为他只显示一次,当屏幕进行刷新时就没有了,

@Override
	public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {

当窗口大小进行改变时调用,初次显示也算,

@Override
	public void displayChanged(GLAutoDrawable drawable, boolean arg1,
			boolean arg2) {

显示改变时调用,,具体的不知道,我也没有用过

7、后续。。。。。。

  • jogl.zip (1 MB)
  • 描述: jogl常用jar包和dll库
  • 下载次数: 226
3
2
分享到:
评论

相关推荐

    jogl简介,jogl入门例子

    以下是一个简单的Jogl入门例子,展示如何创建一个基本的OpenGL窗口并绘制一个红色的立方体: 1. 首先,导入必要的Jogl库: ```java import com.jogamp.opengl.GL2; import com.jogamp.opengl.GLAutoDrawable; ...

    JOGL入门教程,入门代码例子

    这个是我刚刚学JOGL的时候找到的一份资料,很适合JOGL的初学者,内容是E文的,但都是通俗易懂的,只要一点点英语基础就可以理解,现在JOGL的资料很少,希望对想学而又找不到资料的朋友有点帮助

    JOGL入门例子(八)---画机器人:活用长方体

    在本篇【JOGL入门例子(八)---画机器人:活用长方体】中,我们将探讨如何使用Java OpenGL绑定库(JOGL)来创建一个3D机器人模型,特别是通过绘制长方体来构建机器人的各个部分。JOGL是Java平台上的OpenGL接口,允许...

    JAVA的OPENGL,JOGL入门例子(五)----充满能量的立体三维螺旋体

    在本篇博客“JAVA的OPENGL,JOGL入门例子(五)----充满能量的立体三维螺旋体”中,我们将探讨如何使用Java与OpenGL图形库JOGL(Java Bindings for OpenGL)来创建动态的3D图形。OpenGL是一个强大的跨平台图形库,而...

    JAVA的OPENGL,JOGL入门例子(四)----富视觉的螺旋体

    在本篇关于JAVA的OpenGL(JOGL)入门教程的第四部分中,我们将探索如何创建一个具有丰富视觉效果的螺旋体。OpenGL是一个强大的图形库,它允许程序员直接与GPU交互,生成高质量的2D和3D图形。JOGL是Java语言对OpenGL...

    jogl简单入门例子,15个例子,JOGL1.0,2.0的jar包

    标题提到的"jogl简单入门例子"是针对初学者的一系列教程或示例代码,帮助快速理解和上手JOGL。这些例子可能涵盖了JOGL的基本概念、对象创建、渲染流程、纹理映射、变换操作、光照处理等方面,通过实践来巩固理论知识...

    JOGL显示列表例子

    在JOGL入门例子(十四)中,我们可能会学习如何创建、使用和管理显示列表。这通常包括以下步骤: 1. **创建显示列表**:使用`glNewList()`函数指定列表的标识符,并设定开始定义列表的标志。 2. **定义列表**:在这...

    nehe-source JOGL学习代码

    【标题】"nehe-source JOGL学习代码"指的是一个基于Java和JOGL(Java Bindings...总之,"nehe-source JOGL学习代码"是一个宝贵的资源,可以帮助Java开发者快速入门OpenGL编程,通过实际操作和实践,提升3D图形编程能力。

    OpenGL2.0开源库

    提供的"OpenGL开发库2.0"文件可能包含头文件、库文件、示例代码、文档和其他资源,帮助开发者快速入门并充分利用OpenGL 2.0的功能。例如,头文件定义了API函数和常量,库文件则包含了实现这些功能的代码。示例代码是...

    Java 3D交互式三维图形编程及源码

    Java 3D交互式三维图形编程 pdf的书,...最新的1.6版本 已经发布到预览11 了,它和gogl项目在一起维护着,jogl更适合游戏(包括android),如果读者刚入门最好建立起一整套概念,然后便可从基本功出发更加渗入的学习。

    jARToolKit

    LICENSE.TXT中通常会阐述软件的版权信息和使用条件,而README.TXT则可能包含快速入门指导和注意事项。 6. **DemoJOGL**、**DemoGL4Java**、**DemoJARFrameGrabber** 和 **jARToolKitforJava3D**: 这些目录很可能是...

    计算机室图形学3d

    本教程以“计算机室图形学3d”为主题,旨在为初学者提供3D图形基本程序的入门指南。 3D图形的基本概念: 1. **坐标系**:在3D图形中,我们使用笛卡尔坐标系,包括X、Y和Z轴,来定义物体的位置和方向。 2. **几何...

    Java 3D开发教程

    OpenGL编程入门通常包括以下几个步骤: 1. **环境配置**:安装必要的库和开发工具,如设置OpenGL驱动、集成开发环境(IDE)和JOGL库。 2. **基本概念**:理解OpenGL的上下文(Context)、窗口系统接口(Window ...

    java+applet源码-Earthquake-Map-Java-Applet:显示地震的Java小程序的源代码

    Diego通过Coursera提供的Java面向对象编程的一些入门代码。 安装 在Eclipse中导入该文件夹(“文件”-&gt;“导入”-&gt;“现有项目到工作区”,选择此文件夹,“完成”) 手动安装 如果导入不起作用,请执行以下步骤。 ...

    java 3D 学习电子书

    在学习这些书籍时,读者可能会接触到OpenGL和Java Bindings for OpenGL (JOGL)的相关知识,因为Java 3D底层依赖于这些库来实现高性能的3D图形渲染。同时,理解基本的线性代数和向量几何也是学习3D编程的基础,因为...

    .java源码安装-UCSDUnfoldingMaps:UCSDUnfoldingMaps使用处理和展开映射的Eclipse项目,用于Java

    模块文件夹包含用于与MOOC关联的编程分配的入门代码。 兴奋起来,创造事物! 安装在Eclipse中将该文件夹导入(“文件”-&gt;“导入”-&gt;“将现有项目导入工作区”,选择此文件夹,“完成”)。如果不起作用,请尝试(...

    Java游戏编程

    对于更高级的3D游戏,Java程序员通常会利用JMonkeyEngine、LWJGL( Lightweight Java Game Library)或 jogl(Java Bindings for OpenGL)这样的第三方库,这些库提供了与OpenGL或DirectX等底层图形API的接口,使...

Global site tag (gtag.js) - Google Analytics