`
dyllove98
  • 浏览: 1403534 次
  • 性别: Icon_minigender_1
  • 来自: 济南
博客专栏
73a48ce3-d397-3b94-9f5d-49eb2ab017ab
Eclipse Rcp/R...
浏览量:38978
4322ac12-0ba9-3ac3-a3cf-b2f587fdfd3f
项目管理checkList...
浏览量:79957
4fb6ad91-52a6-307a-9e4f-816b4a7ce416
哲理故事与管理之道
浏览量:133073
社区版块
存档分类
最新评论

Java3D实例应用

 
阅读更多

相关文档

Java3D 创建三维几何模型:[ http://www.cnblogs.com/dennisit/archive/2013/05/06/3063042.html ]

Java3D 加载外部Obj模型:[ http://www.cnblogs.com/dennisit/archive/2013/05/07/3065126.html ]

Java3D 加载外部vml模型:[ http://www.cnblogs.com/dennisit/archive/2013/05/07/3065479.html ]

<!--EndFragment-->

VRML和其它实时三维引擎的比较

和最流行Web3D引擎比较,VRMLX3D的市场占有率都不高。这并不是因为技术本身的缺陷,而主要是VRML的制作工具和开发环境相对落后。以前的支持所见即所得的VRML实时开发环境Cosmo WorldsISAAvatar Studio都因为开发公司的转向而没有继续发展,而后面开发的BS EditorFlux Studio等还没有完善。另外VRML也没有提供完善的功能包,而Quest3DUnity3D3D VIA Virtools都提供了完善的功能包。

需要用到vrml驱动包,下载地址http://ishare.iask.sina.com.cn/f/18353873.html?from=like

实例应用: Java3D中载入VRML模型文件

效果:

<!--EndFragment-->

代码

读物vml格式模型文件

package com.java3d.dennist.loader;

import javax.media.j3d.BranchGroup;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.vrml97.VrmlLoader;

/**
 *
 *
 *  @version : 1.1
 *  
 *  @author  : 苏若年         <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0      创建时间:    2013-5-8 下午03:53:37
 *     
 *  TODO     : 读取VML格式模型文件
 *
 */
public class WrlFileReader extends BranchGroup{
        
    /**
     * 
     * 读取VMLModel文件
     * 
     * @param filePath    3ds文件路径
     * 
     */
    public WrlFileReader(String filePath){
        BranchGroup branchGroup = new BranchGroup();
        VrmlLoader vrmlLoader = new VrmlLoader();
        Scene scene = null;
        try {
            scene = vrmlLoader.load(filePath);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("VML模型加载失败" + e.getMessage());
        }
        branchGroup.addChild(scene.getSceneGroup());
        this.addChild(branchGroup);
        
    }

}

加载VML模型到场景,实现鼠标触控三维空间旋转

package com.java3d.dennist.loader;

import java.applet.Applet;
import java.awt.BorderLayout;

import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseWheelZoom;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.universe.ViewingPlatform;

/**
 *
 *
 *  @version : 1.1
 *  
 *  @author  : 苏若年         <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0      创建时间:    2013-5-8 下午03:54:07
 *     
 *  TODO     : 加载VML模型文件到场景
 *
 */
public class JavaModelWrlLoaderApp extends Applet{

    /**
     * 
     */
    private static final long serialVersionUID = 5841679659336190804L;

    
    public BranchGroup createSceneGraph(){
        // 创建场景图分支
        BranchGroup group = new BranchGroup();
        
        // 几何变换组节点
        TransformGroup transGroup = new TransformGroup();
        // 几何变换
        Transform3D trans3d = new Transform3D();
        // 缩放变换
        trans3d.setScale(0.3);
        //将几何变换节点对象添加到节点组
        transGroup.setTransform(trans3d);
        //将几何变化组添加到场景
        group.addChild(transGroup);
        
        // 球体作用范围边界对象
        BoundingSphere bound= new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
        Color3f bgColor = new Color3f(0.05f,0.05f,0.2f);
        Background bg = new Background(bgColor);
        bg.setApplicationBounds(bound);
        group.addChild(bg);
        
        
        // 设置光源
        Color3f lightColor = new Color3f(1.0f,1.0f,0.9f);
        Vector3f lightDirection = new Vector3f(4.0f,-7.0f,-12.0f);
        //设置定向光的颜色和影响范围
        DirectionalLight light = new DirectionalLight(lightColor, lightDirection);
        light.setInfluencingBounds(bound);
        //将光源添加到场景
        group.addChild(light);
        
        //几何变换组节点 - 加载外部模型
        TransformGroup objTrans = new TransformGroup();
        objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        //加载Obj格式的模型文件
        objTrans.addChild(new WrlFileReader("F:/MANY.WRL"));
        //将模型添加到变换组节点
        transGroup.addChild(objTrans);
        
        //设置几何变化,绕Y轴中心旋转
        // 添加通过鼠标左键控制3D物体旋转的对象
        MouseRotate behavior = new MouseRotate();
        behavior.setTransformGroup(objTrans);
        objTrans.addChild(behavior);
        behavior.setSchedulingBounds(bound);
        // 添加鼠标右键的拖拉运动控制3D物体(X,Y)平移
        MouseTranslate tr = new MouseTranslate();
        tr.setTransformGroup(objTrans);
        objTrans.addChild(tr);
        tr.setSchedulingBounds(bound);
        // 添加鼠标滚轮控制3D物体沿Z轴
        MouseWheelZoom tr1 = new MouseWheelZoom();
        tr1.setTransformGroup(objTrans);
        objTrans.addChild(tr1);
        tr1.setSchedulingBounds(bound);
    
        group.compile();
        
        return group;
    }
    
    

    //初始化用户视角
    private void initUserPosition(SimpleUniverse universe,Point3d userPosition){
        ViewingPlatform vp = universe.getViewingPlatform();
        TransformGroup steerTG = vp.getViewPlatformTransform();
        Transform3D t3d = new Transform3D();
        steerTG.getTransform(t3d);
        t3d.lookAt(userPosition, new Point3d(0,0,0), new Vector3d(0,1,0));
        t3d.invert();
        steerTG.setTransform(t3d);
    }  
    
    
    public JavaModelWrlLoaderApp(){
        setLayout(new BorderLayout());
        // 创建3D场景绘制画布Canvas3D对象
        Canvas3D canvas = new Canvas3D(null);
        add("Center",canvas);
        BranchGroup scene = createSceneGraph();
        
        SimpleUniverse universe = new SimpleUniverse(canvas);
        //设定用户视角
        Point3d userPosition = new Point3d(0,-3,60);
        initUserPosition(universe,userPosition);
        //universe.getViewingPlatform().setNominalViewingTransform();
        universe.addBranchGraph(scene);
    }
    
    
    public static void main(String[] args) {
        new MainFrame(new JavaModelWrlLoaderApp(), 360,360); 
    }
}


附录:

VRML是一种专为WWW(万维网)而设计的三维图像置标语言。全称是虚拟现实建模语言,是由VRML协会设计的。VRML标准中既定义了描述三维模型的编码格式,也定义了描述交互或脚本的编码及行为模式。VRML协会现已更名为Web3D联盟,VRML标准现在也已经升级为X3D标准。

VRML的最初版为1994年的VRML 1.0,然后是VRML97,最近新版为X3D标准,三者都是ISO认可的国际标准。VRML 1.0最初只是一个模型格式,后来经过扩展和改写,行成了VRML97VRML97通过原型定义、路由、javascript和一系列的传感器节点完成动画和交互。在VRML97上又发展了骨骼动画和地理坐标等功能扩展。


VRML 有数次跟随显卡硬件发展的升级,现阶段多数的Direct3D 9.0cOpenGL 2.0 GLSL的功能特效都可以实现。VRML 规格为支持显卡硬件的功能,添加了从底层的渲染节点,比如支持三角形、三角形扇、三角形条带等基本渲染元素;比如支持设置显卡的混合模式和设置帧缓存、深度缓存、模板缓存的功能;还有节点能支持多纹理和多遍绘制、支持Shader着色、支持多渲染目标(MRT)、支持几何实例(Geometry Instance)、支持粒子系统。2010年已经可以在X3DVRML中使用延迟着色技术。现在的特效包括SSAOCSM阴影、实时环境反射和折射、基于实时环境和天光的光照、HDR、运动模糊、景深。VRML 导出插件支持对应3ds MAX标准材质的多种贴图/多纹理。

 

VRML 通过H-anim组件支持骨骼动画和蒙皮,也可以通过原型扩展支持角色AI和动作混合。

VRML 通过DIS组件或Networking组件多支持多用户场景和事件共享。

 

现阶段有几个 VRML 引擎能支持ODE物理引擎或PhysX物理引擎。

VRML 浏览器可以通过插件的形式支持Wii控制器、Kinect体感识别、DirectInputXInput等外设。

VRML 浏览器可以通过插件的支持 语音识别和 TTS 文本朗读。

大多数三维软件都能够导入或导出VRML格式,部分三维引擎能够直接载入VRML格式的模型,浏览器可以调用Java applet来提供简单的VRML体验。要体验完整的视觉和交互效果,一般需要单独安装浏览器插件或独立程序。

<!--EndFragment-->
转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/05/08/3067190.html]

在线交谈

<!--EndFragment-->
分享到:
评论

相关推荐

    JAVA3D官方实例

    在JAVA3D实例中,你可能会遇到一些关键概念和技术,例如: 1. **场景图(Scene Graph)**:JAVA3D使用场景图来组织3D对象,类似于HTML中的DOM树。根节点通常是一个`BranchGroup`,它包含其他节点,如几何形状、灯光...

    java3d整合实例。

    本实例是关于如何将Java3D与VRML(Virtual Reality Modeling Language)整合,提供一个交互式的虚拟现实体验。 VRML是一种用于创建和共享交互式3D图形的国际标准,常用于网络环境中的虚拟世界。它允许用户通过...

    Java 3D_java_java3d源码_

    Java 3D是一种基于Java平台的三维图形编程库,它为开发者提供了丰富的API来创建复杂的3D场景和交互式应用。这个技术允许程序员利用Java语言的跨平台特性,开发可以在不同操作系统上运行的3D应用。Java 3D库是建立在...

    Java3D 学习实例

    本学习实例主要涵盖了Java3D的各种使用技巧和效果,是初学者和进阶者深入理解3D编程的宝贵资源。 首先,我们要理解Java3D的基础概念。Java3D的核心在于场景图,它是一种数据结构,用于组织3D对象和它们之间的关系。...

    java各种应用实例

    "Java各种应用实例"这个主题涵盖了Java在多个领域的实际应用,包括但不限于Web开发、桌面应用、移动应用、游戏开发、大数据处理、云计算等。下面将详细讲解Java在这些领域的应用及其相关知识点。 1. **Web开发** -...

    java 3d tutorial 指南 入门实例

    Java 3D 是一个用于在Java环境中展示三维图形的扩展库。它允许开发者编写的应用程序在多种类型...记得,如果你在学习过程中发现错误或有改进建议,可以通过email(editor@java3d.org)帮助改进教程,以惠及未来的读者。

    超棒java3d官方教程+实例

    这个“超棒的Java3D官方教程+实例”集合,包含了从基础到进阶的全方位学习资源,帮助开发者深入理解和掌握Java 3D技术。 首先,我们从“j3d_tutorial_ch1.pdf”开始,这是教程的第一章,通常会介绍Java 3D的基本...

    java3D骰子实现实例

    这个“java3D骰子实现实例”提供了一个基础的3D图形编程体验,特别关注了蒙皮技术和坐标轴的理解。以下是对这些概念的详细解释: 1. **Java3D**: Java3D是Sun Microsystems开发的API,它允许程序员创建复杂的3D场景...

    java3d实例1-10章

    本资源包含从基础到进阶的10个Java3D实例,旨在帮助学习者深入理解和应用Java3D技术。 第一章:入门基础 在这一章中,我们将介绍Java3D的基本概念,包括场景图(Scene Graph)、坐标系统、视点(View Point)和光源...

    java3D 官方教程 中文版

    最后,“Java3D简介(含n个实例)”很可能是一系列的实践案例,这些实例展示了Java3D在实际项目中的应用。每个实例可能都对应一个特定的功能或技巧,如视点控制、碰撞检测、用户界面集成等,通过这些实例,读者可以...

    java3D功能代码演示.rar

    Java3D允许开发者构建具有真实感的三维图形应用,广泛应用于游戏开发、科学可视化、建筑模拟等领域。 Java3D的核心概念包括: 1. **场景图(Scene Graph)**:Java3D中的3D对象和它们之间的关系被组织成一个树状...

    Java3D 探奇- IBM开发网的Java3D入门教程

    IBM开发网的教程通常会详细解释这些概念,并提供实例代码,帮助你逐步实践并掌握Java3D编程。通过这个教程,你不仅可以学习到3D图形编程的基础,还能了解到如何将这些知识应用于实际项目,提升你的Java开发技能。

    java3d.rar

    这个"java3d.rar"压缩包包含了一系列的Java 3D编程实例,旨在帮助初学者和有经验的开发者更好地理解和运用这个库。 在Java 3D中,你可以构建丰富的3D场景,包括点、线、面以及更复杂的3D对象。这些基本元素是通过...

    用Java3D-金字塔

    Java3D是Oracle公司开发的一种基于Java平台的三维图形编程库,它允许开发者创建复杂的3D场景,并在Java应用程序或Web应用中展示。这个“用Java3D-金字塔”项目显然是一个利用Java3D库来演示如何构建一个基本的3D...

    java3d 编程源码

    通过这些实例,学习者可以直观地理解如何在实际代码中运用Java3D API,从而逐步掌握3D图形编程的基本技巧。 6. **学习路径**:对于初学者,首先需要了解Java3D的基本架构和概念,然后逐步深入到材质和纹理的使用,...

    java3d编程指南

    书中提供的实例代码和练习有助于加深理解,同时,附带的资源文件可能包含了一些示例项目的源码,如OReilly.Killer.Game.Programming.in.Java.May.2005.chm,这可能是与游戏编程相关的参考资料,可以辅助学习Java3D在...

    Java3D 32位

    4. **学习文档**:压缩包中的`java3D学习.doc`、`_Java3D.doc`和`安装java3D及配置.doc`是关于Java3D的学习资料,它们可能涵盖了基本概念、API使用、实例代码以及配置教程等内容。通过阅读这些文档,开发者可以了解...

    java 3d入门教程

    Java 3D是一种基于Java平台的高级编程接口(API),专为创建和展示交互式的三维图形应用程序而设计。它的出现使得开发者能够在互联网上构建类似网页浏览体验的三维动态图形,而且这种体验可以在多种不同的软硬件平台...

    Java 3D与计算机三维动态图形网络编程设计

    在“37483Java 3D与计算机三维动态图形网络编程设计”的PPT中,很可能会详细阐述这些概念,并通过实例展示如何将它们应用于实际项目。通过学习这些内容,开发者不仅可以掌握Java 3D的基本用法,还能深入了解三维图形...

    Java3d交互式三维图形编程

    附带的"Java3d交互式三维图形编程.pdf"文档应该包含了详细的教程内容和实例代码,阅读时可结合"SRC"目录下的源代码进行实践。源代码是理解理论知识的关键,通过实际运行和修改代码,你可以更好地理解和掌握Java3D的...

Global site tag (gtag.js) - Google Analytics