java 3d 入门

   课题需要根据实验数据画出3d曲面图,来展示二维数据,所以使用java3d来实现。这里是java3d的学习记录。

1.Java 3D简介

      Java 3D是Java语言在三维图形领域的扩展,是一组应用编程接口(API)。利用Java 3D提供的API,可以编写出基于网页的三维动画、各种计算机辅助教学软件和三维游戏等等。利用Java 3D编写的程序,只需要编程人员调用这些API进行编程,而客户端只需要使用标准的Java虚拟机就可以浏览,因此具有不需要安装插件的优点。


2.java3d的安装方法

      我使用的jdk为j2sdk14版本,所以下载的java3d版本必须为1.4版本(文件名java3d-1_4_0_01-windows-i586.exe),下载地址如下:
http://java.sun.com/products/java-media/3D/1.4.0_01/download.html

      java3d-1_4_0_01-windows-i586.exe安装完后,打开C:\Program Files\Java\Java3D\1.4.0_01文件夹,拷贝bin和lib文件夹至D:\j2sdk14\jre。

3. 一个例子

      下面代码拷贝到记事本,存为Hello.java。然后用javac Hello.java编译,java Hello.class运行。

import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;

public class Hello {
public Hello()
{
   // 创建一个虚拟空间
   SimpleUniverse universe = new SimpleUniverse();
   // 创建一个用来包含对象的数据结构
   BranchGroup group = new BranchGroup();
  
   // 创建一个球并把它加入到group中
   Sphere sphere = new Sphere(0.5f); // 小球的半径为0.5米
   group.addChild(sphere);
  
   Color3f light1Color = new Color3f(1.8f, 0.1f, 0.1f);
   // 设置光线的颜色
   BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
   // 设置光线的作用范围
   Vector3f light1Direction = new Vector3f(4.0f, -7.0f, -12.0f);
   // 设置光线的方向
   DirectionalLight light1= new DirectionalLight(light1Color, light1Direction);
   // 指定颜色和方向,产生单向光源
   light1.setInfluencingBounds(bounds);
   // 把光线的作用范围加入光源中
   group.addChild(light1);
   // 将光源加入group组,安放观察点
   universe.getViewingPlatform().setNominalViewingTransform();
   // 把group加入到虚拟空间中
   universe.addBranchGraph(group);
}

public static void main(String[] args)
{
   new Hello(); 
}
}

 

 

 

 

若出现以下错误,则必须更新电脑的显示驱动,使之支持OpenGl1.2朝上版本。我电脑显示驱动下载地址 http://drivers.mydrivers.com/download/206-82605-ATI-Mobility-Radeon-8.3-For-WinXP/

 

Java 3D ERROR :wglGetExtensionsStringARB not support !
-找不到指定的程序.
Fallback to use standard ChoosePixelFormat.
Java 3D ERROR : OpenGL1.2 or better is required <GL_VERSION=1.1>
java.lang.IllegalStateException: GL_VERSION

4. 网络上的JAVA3D学习资料

(1)http://www.sun.com/desktop/java3d/collateral/ 
这里有SUN公司为我们提供的学习资料。

(2)http://www.sdsc.edu/~nadeau/Courses/VR99/java3d.zip 
这是一个非常好的JAVA3D学习资料。(12,058K),里面有许多例子。 字串3 
大家可以从
http://www.sdsc.edu/~nadeau/中得到VRML和JAVA3D的许多资料。

JAVA 3D开发工具包(3个版本),java3d-1_3、java3d-1_4、java3d-1_5,加一个例子。例子代码如下: import java.awt.GraphicsConfiguration; import javax.media.j3d.Alpha; import javax.media.j3d.BoundingSphere; import javax.media.j3d.BranchGroup; import javax.media.j3d.Canvas3D; import javax.media.j3d.RotationInterpolator; import javax.media.j3d.Transform3D; import javax.media.j3d.TransformGroup; import javax.swing.JApplet; import javax.vecmath.Point3d; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.universe.SimpleUniverse; import com.sun.j3d.utils.universe.ViewingPlatform; public class HelloUniverse extends JApplet { public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); //新建一个变形组结点,初始化它 //变形组结点指定一个单一的空间变形,通过一个Transform3D对象, //能对它的子结点定位,定向,定尺寸 TransformGroup objTrans = new TransformGroup(); //指定结点可以写入它的对象的变形信息。这样我们的行为代码就能在运行进修改它。 objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE); //根节结中加入这个变形组结点 objRoot.addChild(objTrans); //新建一个例子Shape3D结点,并把它加入到场景图表中 objTrans.addChild(new ColorCube(0.4)); Transform3D yAxis = new Transform3D(); /* * 提供转换一个时间值到一个0到1之间的alpha值的方法 * 第一个参数loopCount:运行循环次数,-1表示无限循环 * 第二个参数increasingAlphaDuration:alpha值从0到1的时间周期 */ Alpha rotationAlpha = new Alpha(-1, 4000); //新建旋转者,它将执行变形操作 RotationInterpolator rotator = new RotationInterpolator( rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI*2.0f); //用一个中心点和半径定义一个球状范围区域。 BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0); //设置旋转者的运行范围 rotator.setSchedulingBounds(bounds); //加它到根结点 objRoot.addChild(rotator); //执行优化 objRoot.compile(); return objRoot;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值