博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java3D实例应用-载入VRML模型
阅读量:7113 次
发布时间:2019-06-28

本文共 6483 字,大约阅读时间需要 21 分钟。

相关文档

Java3D 创建三维几何模型:[  ]

Java3D 加载外部Obj模型:[  ]

Java3D 加载外部vml模型:[  ]

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

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

需要用到vrml驱动包,下载地址

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

效果:

代码

读物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  : 苏若年         发送邮件 *     *  @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  : 苏若年         发送邮件 *     *  @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体验。要体验完整的视觉和交互效果,一般需要单独安装浏览器插件或独立程序。

转载请注明出处:[]

 

你可能感兴趣的文章
(转) OpenCV学习笔记大集锦 与 图像视觉博客资源2之MIT斯坦福CMU
查看>>
Controller 接口控制器详解
查看>>
【转】【MySQL】mysql 通过bin-log恢复数据方法详解
查看>>
linux上安装启动elasticsearch-5.5.1完整步骤
查看>>
请求失败或服务未及时响应。有关详细信息,请参见事件日志或其他适用的错误日志...
查看>>
Silverlight 4 MVVM开发方式(一)小黑端
查看>>
公告:CSDN博客频道新功能正式上线!
查看>>
Web服务的体系架构
查看>>
linux下apache的使用
查看>>
UML对象图(转载)
查看>>
Computer skills one can learn within one day
查看>>
关于删除MySQL Logs的一点记录
查看>>
[cb]Unity 项目架构
查看>>
spin_lock & mutex_lock的区别?
查看>>
居安思危,奋发图强,别整那些没用的
查看>>
数据库的备份与还原
查看>>
C语言清空输入缓冲区的N种方法对比【转】
查看>>
Idea_Intellij Idea 12 生成serialVersionUID的方法
查看>>
stm32 加入 USE_STDPERIPH_DRIVER、STM32F10X_HD的原因
查看>>
死锁介绍
查看>>