推荐给好友 上一篇 | 下一篇

十三、X3D的嵌入脚本Java编程技术

 

一、X3D-Edit安装配置

二、文本的显示

三、X3D2D图形的构造

四、基本3D图形的创建方法

五、立体造型的几何变换

六、视点和导航的设置

七、场景的光照效果

八、纹理映射

九、X3D场景的多媒体效果

十、X3D的动画效果

十一、X3D的交互技术

十二、X3D的嵌入脚本编程技术

十三、X3D的嵌入脚本Java编程技术

十四

十三、X3D的嵌入脚本Java编程技术


 


由于Java语言功能强大,且字节流运行速度比JavaScriptVrmlScript要快,不仅是复杂编程,一般简单编程也可以用Java,以实现动态、交互、三维的WWW虚拟场景。但在具体应用时,存在着各VRML浏览器的兼容性问题,VRML场景中的Java编程功能有可能在一种浏览器上运行正常,而在另一种浏览器上根本就不能工作;发布在网络上可以正常工作,而在本地就不能正常工作;不同的VRML浏览器的稳定性和一致性不能满足用户要求,还需要进行兼容设计。


在本节中,我们先来看一个实例过程,然后说明其简单编程与调试方法。


一、 安装配置JDK


使用JDK1的兼容性要好些,安装也简单,我们可使用jdk-1_0_2


首先将jdk-1_0_2-win32-x86.exe解压至C:\java


JAVA3D调用VRML图形所用的0.3Mvrml97.jar一般放置在 C:\jdk1.3\jre\lib\ext 或用classpath指定其位置。在本例中放在C:\jdk\中。后面通过批处理命令文件来设置与执行。


 


二、 X3d-Edit编程


在上面的例子48中,我们用Java来实现SCRIPT1ecmascript的功能:把SCRIPT1CDATA节点删去,把ecmascript改成增添URL脚本。


编程代码如下图所示:(见48javadebug.x3d48javadebug.x3dv48javadebug.wrl


 


三、 编写Java程序


x48提供了三维场景脚本功能,同以前一样,在Java脚本编程时,我们可以使用程序调试技术,在程序运行时,把其中的一些重要变量在控制台窗口中显示出来。以下是x48.java源代码:


import vrml.*; // Java Script Authoring Interface (JSAI) classes for VRML


import vrml.field.*;


import vrml.node.*;


public class x48 extends vrml.node.Script


{


     public static boolean DEBUG = true;//DEBUG allows developers to turn execution-trace messages on/off


     private SFBool isActive;


     public void initialize ()  // Initialize scene variables prior to rendering.


     {


       try {


isActive = (SFBool) getEventOut ("isActive"); // instantiate local eventOut


if (DEBUG) System.out.println ("Java initialize (1): isActive is " + isActive);


           }  //these System.out.println messages appear in the Java Console window.


       catch (Exception e)        // Script errors are very hard to debug and will fail silently if not caught


       {                                     // See browser's Java Console for output


           System.err.println ("Exception caught in Script node initialize method:");


           System.err.println (e);


           e.printStackTrace();


       }


       return;


    }


     public void processEvent (Event e)


     {                           //processEvent() is called automatically when the script receives any event


     Node node;


       try {


            if (DEBUG) System.out.println ("==============================");


            if (e.getName().equals("set_Active"))


            {                    param set_Active provides the user's "click" Event ROUTEd into the Script.


            ConstSFBool v=(ConstSFBool)e.getValue();


                   if (v.getValue())


                   {


                   isActive.setValue( true);


                   System.out.println ("isActive is " + isActive);


                   if (DEBUG) System.out.println ("Mouse down" );


                   }


                   else


                   {


                   System.out.println ("isActive is " + isActive);


                   if (DEBUG) System.out.println ("Mouse up" );


                   }


            }


          }


       catch (Exception exc)


       {


           System.err.println ("Exception caught in Script node processEvent method:");


           System.err.println (exc);


           exc.printStackTrace();


       }


       return;


     }


}


 


四、 Java程序编译运行


Cortona VRML Client 4.XX3D/VRML浏览器插件,功能强大,完全支持VRML97并扩展了VRML规范(Splines, NURBs, FontStyle, AdvancedAppearance, 拖拽操作, 键盘输入, 三维文本, Real音视频及Macromedia Flash支持),支持Java语言和JavaScript语言;支持基于DirectX OpenGL的硬件加速渲染,以及软件渲染;兼容IENetscape;支持多用户环境。该插件提供了遵循规范的Java部分和Java EAI规范的Java类库, Cortona VRML client带有corteai.zipclasses.zip可以与vrml97.jar配合使用。把它们拷贝来一起放在C:\jdk\下,通过设置CLASSPATH来编译使用。用Cortona能正常浏览含classwrl文件,并在其控制台中显示出调试信息。


Cortonacortvrml.cab中有classes.zipcorteai.zipInternet Explorer浏览器为例,在安装好VRML插件后,可运行注册表编辑器regedit.exe,在HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Java VM/Classpath注册项中找到这些类库的文件位置。


编辑一个批处理命令文件javacompiler.bat,内容如下:


set CLASSPATH=C:\jdk\classes.zip;C:\jdk\vrml97.jar;


javac x48.java


把它和要编译的x48.java拷贝至C:\java\bin下,双击执行即可生成x48.class文件。把x48.class文件拷贝到wrlx3d)文件所在文件夹,即可浏览运行wrl场景文件。


要使用某种VRML浏览器来浏览虚拟场景,就使用该浏览器的类库进行Java文件的编译,形成class文件后与VRML文件放于同一文件夹下,双击VRML文件就可进行本地测试,看能否正常运行。注意:所使用的文件及文件夹要用英文名;若是VRML2.0 Viewer还需要在Classpath注册项中包含有编译后形成class文件的目录,本地测试时才能正常运行,否则将在VRML控制台上出现出错提示:java.lang.ClassNotFoundException: Text(即Text.class文件找不到);另外,如果使用EAI浏览时在VRML控制台或状态栏上显示ClassNotFoundException:vrml.external.browser,则类库可能与其它VRML class文件冲突,此时可通过修改Classpath注册项设置来解决。


 


五、 存在问题


使用Java以实现动态、交互、三维的WWW虚拟场景时,存在着各VRML浏览器的功能与兼容性问题。


BS Contact 6.16.2浏览器不支持Java的脚本节点,浏览wrl文件时,控制台显示信息见下图,可见,ecmascript脚本已执行,但Java脚本未装入。


 


若打开48javadebug.X3D文件,浏览器中会有静态场景显示,但Java的控制功能不能发挥出来。


Flux控制台中显示:


Loading file:///C:/www.web3d.org/x3d/content/examples/my/48javadebug.X3D...


Done


ecmascript initialize (2):


Loading file:///C:/www.web3d.org/x3d/content/examples/my/x48.class...


Done


可见ecmascript脚本已执行,Java脚本已装入但并未执行。


 独立运行的工具包Xj3D不是浏览器插件,只浏览X3D、X3DV、wrl场景,不能浏览htm网页文件,可正常运行48javadebuge.wrl并在Browser console中显示ecmascript输出信息,而Java的输出信息显示在命令行窗口中,可在桌面上快捷方式Xj3DBrowser Java3D的属性中的“目标”文本框中修改为"H:\Program Files\Xj3D\browser.bat" -j3d >log.txt,以记录Java的输出信息。


查看全部1条评论

最新评论

 

评分:0

我来说两句

seccode