查看完整版本: EAI 实现java 对vrml的控制(转)

青衣白鹤 2007-11-5 18:49

EAI 实现java 对vrml的控制(转)

综合看了一些文章和帖子, 对网友常提出的关于"EAI 实现java 对vrml的控制"问题给出以下个人意见.
重复我的整个制作过程
1.准备工作:
    下载并安装jdk开发包jdk1.3.1_16(建议jdk1.3低版本).默认安转路径C:\jdk1.3.1_16
   下载地址[img]http://www.vr100.com/images/filetype/url.gif[/img][url=http://www.vr100.com/down/view.asp?id=115][color=#0000ff]http://www.vr100.com/down/view.asp?id=115 [/color][/url];  下载并安转vrml浏览器
   下载并安装java虚拟机
2.配置环境变量:右键 单击"我的电脑"--〉"属性"--〉"高级"--〉"环境变量"--〉
在"环境变量"属性框中的"系统变量(s)" 栏里点"新建",新建三个环境变量JAVA_HOME,Path,CLASSPATH.并分别填上它们的变量值.
变量名:JAVA_HOME
变量值:C:\jdk1.3.1_16(这是您jdk的安装目录)
变量名:Path
变量值%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
变量名:CLASSPATH
变量值%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\vrml97.jar
3.添加包vrml97.jar
下载vrml97.jar
下载地址[img]http://www.vr100.com/images/filetype/url.gif[/img][url=http://www.vr100.com/down/view.asp?id=114][color=#0000ff]http://www.vr100.com/down/view.asp?id=114[/color][/url]
下载后把vrml97.jar放在目录C:\jdk1.3.1_16\lib\(注:这就是环境变量CLASSPATH设置的目录%JAVA_HOME%\lib\vrml97.jar).
由于程序中会引用到浏览器类(就是引用这些import vrml.external.Browser;
import vrml.external.Node;import vrml.external.field.EventInSFColor)的时候会用到
,这里我已经把vrml浏览器类包添加到vrml97.jar中了.制作jar方法很简单,在备注中细说

青衣白鹤 2007-11-5 18:49

[table][tr][td][img]http://www.vr100.com/images/smiley/icon/0.gif[/img]
[/td][/tr][tr][td]4.编写java代码.以<vrml与java编成实例讲解>一书中的代码changecolor.java为例:
import java.awt.*;
import java.applet.*;
import vrml.external.Browser;
import vrml.external.Node;
import vrml.external.field.EventInSFColor;
public class changecolor extends Applet{
        Scrollbar scrBar[]=new Scrollbar[3];
        Label labelColor[]=new Label[3];
        Label labelDemo;
        Browser browser;
        Node myMaterial;
        String Text[]={"R=","G=","B="};
        boolean isScenceLoading=true;
        public void start(){
                while (isScenceLoading){
                        try{
                                browser=Browser.getBrowser(this);
                                myMaterial=(Node)(browser.getNode("ConeColor"));
                                isScenceLoading=false;
                                labelDemo.setText("TestColor");
                        }
                        catch(Exception e){labelDemo.setText("VRML Loading");}
                }
        }
        public void init(){
                super.init();
                setLayout(null);
                resize(240,240);
                setBackground(Color.orange);
                for(int i=0;i<3;i++){
                        scrBar[i]=new Scrollbar(Scrollbar.VERTICAL);
                        add(scrBar[i]);
                        scrBar[i].reshape(100+80*i,5,20,160);
                        scrBar[i].setValues(50,0,0,10);
                        labelColor[i]=new Label(Text[i]+scrBar[i].getValue(),Label.LEFT);
                        add(labelColor[i]);
                        labelColor[i].setBackground(Color.green);
                        labelColor[i].reshape(100+80*i,165,40,20);
                }
                labelDemo=new Label("TestColor",Label.CENTER);
                add(labelDemo);
                labelDemo.reshape(320,70,80,80);
                labelDemo.setBackground(new Color(122,122,122));
        }
        public boolean handleEvent(Event event){
                for(int i=0;i<3;i++){
                        if (event.id==Event.SCROLL_LINE_UP&&event.target==scrBar[i]){
                                setColorLabel(event,i);
                                return true;
                        }
                        else if(event.id==Event.SCROLL_LINE_DOWN&&event.target==scrBar[i]){
                                setColorLabel(event,i);
                                return true;
                        }
                        else if(event.id==Event.SCROLL_ABSOLUTE&&event.target==scrBar[i]){
                                setColorLabel(event,i);
                            return true;
                        }
                }
                return super.handleEvent(event);
        }
        public void setColorLabel(Event ev,int i){
                Color demoColor;
                labelColor[i].setText(Text[i]+scrBar[i].getValue());
                demoColor=new Color((int)(2.55*scrBar[0].getValue()),
                        (int)(2.55*scrBar[1].getValue()),
                        (int)(2.55*scrBar[2].getValue())
                        );
                labelDemo.setBackground(demoColor);
                float value[]=new float[3];
                EventInSFColor newColor=(EventInSFColor)myMaterial.getEventIn("set_diffuseColor");
                for(i=0;i<3;i++)
                        value[i]=(float)(scrBar[i].getValue()/100f);
                newColor.setValue(value);
        }
}


保存changecolor.java(比如您的保存目录为D:\lianxi\vrml\test\changecolor.java)

5.编译changecolor.java
比如在MS-DOC下编译

(开始--> 运行)输入cmd
在MS-DOC下输入编译语句.

C:\jdk1.3.1_16\bin\javac.exe D:\lianxi\vrml\test\changecolor.java
注: C:\jdk1.3.1_16\bin\javac.exe是你编译程序文件,而D:\lianxi\vrml\test\changecolor.java就是您的.java原代码文件
如果编译通过将在changecolor.java同目录的文件下生成字节码文件changecolor.class

6.编写html 文件
<html>
<head>
<title>Color pest</title>
</head>
<body bgcolor=blue "topmarqin=0">
<big><big><b>
<font color="#ff0000">the example for control color:</font>
</b></big></big><br>
<center>
<embed src="cone.wrl" border=0 height="220" width="300">
</center>
<br>
<center>
<applet code="changecolor.class" width="450" height="200" mayscript>
</applet>
</center>
</body>
</html>

保存该文件,取名为changecolor.html
(保存在与changecolor.class同目录的文件夹里,比如D:\lianxi\vrml\test\)

7.可能java虚拟机不支持,可以用微软的虚拟机预览
在ie里面设置如下:
[img]http://www.vr100.com/upload/forum/2005092618403397.jpg[/img]

8.ok来预览一下效果吧
[img]http://www.vr100.com/upload/forum/2005092618394934.jpg[/img]

[color=red]备注:jar 文件的制作方法:
当需要某个类包包含在一个jar文件里面的时候,您可以用winrar软件打开已经有的jar文件(比如vrml97.jar),点击"添加"
选择要添加的包(比如在某个目录里).比如Cortona浏览器类包在C:\Program Files\Common Files\ParallelGraphics\Cortona\corteai.zip里面
点"确定"就ok了
以后要用到某个类包的时候,就用这种方法(所有的类包都放在一个文件jar文件里面比如C:\jdk1.3.1_16\lib\vrml97.jar),向jar文件里面添加类就行了.不必再设置环境变量后重启电脑这么麻烦.[/color]




[/td][/tr][/table]
页: [1]
查看完整版本: EAI 实现java 对vrml的控制(转)