信息系统项目管理师_2024年软考学习应考交流_信息系统项目管理师考试

 找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 8820|回复: 15
打印 上一主题 下一主题

虚拟现实vrml script 语法介绍

  [复制链接]

该用户从未签到

升级  30.8%

跳转到指定楼层
楼主
发表于 2006-4-24 08:37:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
<p>1 语言<br/>VRMLScript与JavaScript具有相似的语法形式</p><p>1.1&nbsp; BNF 语法<br/>script :&nbsp; <br/>functions&nbsp; <br/>NULL&nbsp; <br/>functions:&nbsp; <br/>functions function&nbsp; <br/>function&nbsp; <br/>function:&nbsp; <br/>function beginFunction ( args ) statementBlock&nbsp; <br/>beginFunction:&nbsp; <br/>identifier&nbsp; <br/>args:&nbsp; <br/>args , identifier&nbsp; <br/>identifier&nbsp; <br/>NULL&nbsp; <br/>stmntblk:&nbsp; <br/>{ statements }&nbsp; <br/>{ }&nbsp; <br/>statement&nbsp; <br/>statements :&nbsp; <br/>statements statement&nbsp; <br/>statement&nbsp; <br/>statement :&nbsp; <br/>ifStatement&nbsp; <br/>forStatement&nbsp; <br/>whileStatement&nbsp; <br/>returnStatement ;&nbsp; <br/>breakStatement ;&nbsp; <br/>continueStatement ;&nbsp; <br/>compoundExpression ;&nbsp; <br/>ifStatement :&nbsp; <br/>if ( compoundExpression ) statementBlock&nbsp; <br/>if ( compoundExpression ) statementBlock else statementBlock&nbsp; <br/>forStatement :&nbsp; <br/>for ( optionalExpression ; optionalExpression ; optionalExpression ) statementBlock&nbsp; <br/>  <br/>whileStatement :&nbsp; <br/>while ( compoundExpression ) statementBlock <br/>returnStatement :&nbsp; <br/>return compoundExpression&nbsp; <br/>return&nbsp; <br/>breakStatement :&nbsp; <br/>break&nbsp; <br/>continueStatement :&nbsp; <br/>continue&nbsp; <br/>compoundExpression :&nbsp; <br/>expression , compoundExpression&nbsp; <br/>expression&nbsp; <br/>optionalExpression:&nbsp; <br/>compoundExpression&nbsp; <br/>NULL&nbsp; <br/>expression : ( compoundExpression )&nbsp; <br/>- expression&nbsp; <br/>! expression&nbsp; <br/>~ expression&nbsp; <br/>leftVariable = expression&nbsp; <br/>leftVariable += expression&nbsp; <br/>leftVariable -= expression&nbsp; <br/>leftVariable *= expression&nbsp; <br/>leftVariable /= expression&nbsp; <br/>leftVariable %= expression&nbsp; <br/>leftVariable &amp;= expression&nbsp; <br/>leftVariable |= expression&nbsp; <br/>leftVariable ^= expression&nbsp; <br/>leftVariable &lt;&lt;= expression&nbsp; <br/>leftVariable &gt;&gt;= expression&nbsp; <br/>leftVariable &gt;&gt;&gt;= expression&nbsp; <br/>++ expression&nbsp; <br/>-- expression&nbsp; <br/>expression ++&nbsp; <br/>expression --&nbsp; <br/>expression ? expression : expression&nbsp; <br/>expression == expression&nbsp; <br/>expression != expression&nbsp; <br/>expression &lt; expression&nbsp; <br/>expression &lt;= expression&nbsp; <br/>expression &gt;= expression&nbsp; <br/>expression &gt; expression&nbsp; <br/>expression + expression&nbsp; <br/>expression - expression&nbsp; <br/>expression * expression&nbsp; <br/>expression / expression&nbsp; <br/>expression % expression&nbsp; <br/>expression &amp;&amp; expression&nbsp; <br/>expression || expression&nbsp; <br/>expression &amp; expression&nbsp; <br/>expression | expression&nbsp; <br/>expression ^ expression&nbsp; <br/>expression &lt;&lt; expression&nbsp; <br/>expression &gt;&gt; expression&nbsp; <br/>expression &gt;&gt;&gt; expression&nbsp; <br/>string&nbsp; <br/>number&nbsp; <br/>objectMethodCall&nbsp; <br/>objectMemberAccess&nbsp; <br/>functionCall&nbsp; <br/>new constructor&nbsp; <br/>arrayDereference&nbsp; <br/>variable&nbsp; <br/>functionCall :&nbsp; <br/>identifier ( params ) <br/>constructor :&nbsp; <br/>identifier ( params ) <br/>objectMethodCall :&nbsp; <br/>expression . identifier ( params )&nbsp; <br/>objectMethodAccess :&nbsp; <br/>expression . identifier&nbsp; <br/>params :&nbsp; <br/>params , expression&nbsp; <br/>expression&nbsp; <br/>NULL <br/>arrayDereference :&nbsp; <br/>expression [ compoundExpression ] <br/>leftVariable :&nbsp; <br/>objectMethodAccess&nbsp; <br/>arrayDereference&nbsp; <br/>variable <br/>variable :&nbsp; <br/>identifier&nbsp; <br/>string:&nbsp; <br/>' utf8 '&nbsp; <br/>number:&nbsp; <br/>0{0-7}+&nbsp; <br/>... ANSI C floating point number ...&nbsp; <br/>0X{ 0-9 }+&nbsp; <br/>0x{ 0-9 }+&nbsp; <br/>TRUE&nbsp; <br/>true&nbsp; <br/>FALSE&nbsp; <br/>false <br/>identifier:&nbsp; <br/>utf8Character { utf8 }*&nbsp; <br/>utf8Character:&nbsp; <br/>... any legal UTF8 character except 0-9 ...&nbsp; <br/>utf8:&nbsp; <br/>utf8Character&nbsp; <br/>0-9&nbsp; <br/>1.2 对象与变量<br/>数据在 VRMLScript 中被描述为对象。对象类型对应于VRML的域 。一个变量包含对象的一个状态,并且可预先定义 ( 在 Script 节点中 ) 或局部定义。 </p><p>1.2.1 取值, 命名<br/>一个VRMLScript变量保存对象的一个状态。如果一个Script节点的field或eventOut被定义&nbsp;&nbsp; ,则与此同名的变量在 Script 节点中全程可用。这个变量的类型与field或eventOut的类型一致。( 见数据变换 ) 。 </p><p>变量名必须以一个字母 ("a"—"z"或“A“—”z“), 或下划线”_"开头。随后的字符可以是任何字母或数字。变量名是区分大小写的? </p><p>变量可通过给新的变量名赋值来创建。变量的类型总是最后被赋值的类型。变量在它被初次引入的程序块范围内有效,Script节点中的field或eventOuts变量在整个节点范围内有效。</p><p>数字, 布尔, 字符串类型的文字可在VRML Script中使用。数字类型可以是十进制 ( 417 ), 十六进制 ( 0x5C ), 或 八进制 ( 0177 ) 形式。也可为浮点 ( 1.76 ) 或指数 ( 2.7e-12 ) 形式。所有的数字字符均为 number 类型。布尔类型值为“true”或“false”类型为 boolean 。字符串可以是在单引号 (') 中的任何顺序的 UTF8 字符,类型为 String。特殊字符可按下列方式使用</p><p>字符&nbsp;&nbsp;&nbsp; 含义&nbsp;&nbsp;&nbsp; <br/>\b 退格 <br/>\f 换页 <br/>\n 换行 <br/>\r 回车 <br/>\t tab <br/>\' 单引号 <br/>\" 双引号 <br/>\\ \ </p><p>举例:</p><p>Script {</p><p>&nbsp;&nbsp;&nbsp; field&nbsp;&nbsp;&nbsp; SFFloat aField&nbsp; 0</p><p>&nbsp;&nbsp;&nbsp; field&nbsp;&nbsp;&nbsp; SFVec3f aVector 0 0 0</p><p>&nbsp;&nbsp;&nbsp; eventOut SFInt32 anEventOut</p><p>&nbsp;&nbsp;&nbsp; eventIn&nbsp; SFBool&nbsp; event</p><p>&nbsp;</p><p>&nbsp;&nbsp;&nbsp; url "vrmlscript:</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function event(value, timestamp) {</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (aField == 1.5) {</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a = true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 'a' contains a boolean</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (a) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // this is NOT the same 'a' as above!</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value = 5;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // ERROR,</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; can't assign to function parameter!</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aField = anEventOut; // SFInt32 converted to SFFloat</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = aField;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 'b' contains a number</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b = anEventOut;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 'b' now contains a different number</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; aField = aVector;&nbsp;&nbsp;&nbsp; // ERROR,</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; can't assign SFVec3f to SFFloat!</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s = 'Two\nLines';&nbsp;&nbsp;&nbsp; // 's' contains a String</p><p>&nbsp;&nbsp;&nbsp;&nbsp; </p><p>&nbsp;&nbsp;&nbsp; }"</p><p>}<br/></p>
[此贴子已经被作者于2006-4-24 8:38:47编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 顶 踩
  • TA的每日心情
    开心
    2015-8-14 08:31
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    升级  0.01%

    16
    发表于 2011-7-3 08:32:51 | 只看该作者
    挺好啊  

    该用户从未签到

    升级  30.8%

    15
     楼主| 发表于 2006-4-24 08:47:52 | 只看该作者
    关于编辑器,目前主要的vrml script 编辑器有:vrmlpad2.1版,需要的朋友留言后本人可上传到论坛。

    该用户从未签到

    升级  30.8%

    14
     楼主| 发表于 2006-4-24 08:44:55 | 只看该作者
    <p>该组帖子从网络上整理而得,有兴趣的朋友不妨阅读一下《VRML与Java编程技术》人民邮电出版社</p>

    该用户从未签到

    升级  30.8%

    13
     楼主| 发表于 2006-4-24 08:43:31 | 只看该作者
    <p>MyObserver.java </p><p>Back To Top</p><p>import vrml.external.Browser;<br/>import vrml.external.Node;<br/>import vrml.external.field.*;<br/>import vrml.external.field.EventOutObserver;<br/>import java.awt.*;</p><p>public class MyObserver implements EventOutObserver {<br/>&nbsp;&nbsp;&nbsp; EventInSFVec3f scale;<br/>&nbsp;&nbsp;&nbsp; float scaleOfBall;<br/>&nbsp;&nbsp;&nbsp; Node ball;<br/>&nbsp;&nbsp;&nbsp; public void init(Browser browse) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ball = browse.getNode("BALL");<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void callback(EventOut event, double timeStamp, Object myLabel) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scaleOfBall=(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((EventOutSFVec3f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ball.getEventOut("scale_changed"))).getValue()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )[0];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((Label)myLabel).setText(""+scaleOfBall);<br/>&nbsp;&nbsp;&nbsp; }<br/>}</p><p></p><p>--------------------------------------------------------------------------------</p><p>Observer.java Back To Top</p><p>import java.awt.*;<br/>import java.applet.*;<br/>import vrml.external.Browser;<br/>import vrml.external.Node;<br/>import vrml.external.field.EventOutObserver;</p><p>public class ScaleObserver extends Applet {<br/>&nbsp;&nbsp;&nbsp; Browser browse;<br/>&nbsp;&nbsp;&nbsp; Node sensor;<br/>&nbsp;&nbsp;&nbsp; Label labelScale;<br/>&nbsp;&nbsp;&nbsp; public void start(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browse=Browser.getBrowser(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sensor = browse.getNode("BALL");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MyObserver observer = new MyObserver();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; observer.init(browse);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sensor.getEventOut("set_scale").advise((EventOutObserver)observer, (Object)labelScale);<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void init() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setLayout(null);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resize(100,100);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelScale=new Label("");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(labelScale);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelScale.reshape(0,0,100,20);<br/>&nbsp;&nbsp;&nbsp; }<br/>}<br/></p>

    该用户从未签到

    升级  30.8%

    12
     楼主| 发表于 2006-4-24 08:43:18 | 只看该作者
    <p>VRML代码</p><p>#VRML V2.0 utf8<br/>DEF BALL Transform{<br/>&nbsp;&nbsp;&nbsp; children [<br/>&nbsp;&nbsp;&nbsp; Shape{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appearance Appearance{ material Material{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; diffuseColor 1 0 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shininess .8<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geometry Sphere{radius 0.5}<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; DEF SENSOR TouchSensor{}<br/>&nbsp;&nbsp;&nbsp; ]<br/>}<br/>DEF POS PositionInterpolator{<br/>&nbsp;&nbsp;&nbsp; key[0,0.25,0.5,0.75,1.0]<br/>&nbsp;&nbsp;&nbsp; keyValue[1,1,1,1.3 1.3 1.3, 1.5 1.5 1.5<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.3 1.3 1.3 1&nbsp;&nbsp; 1&nbsp;&nbsp; 1 ]<br/>}<br/>DEF TIMER TimeSensor{ cycleInterval 1}</p><p>ROUTE SENSOR.touchTime TO TIMER.startTime<br/>ROUTE TIMER.fraction_changed TO POS.set_fraction<br/>ROUTE POS.value_changed TO BALL.set_scale</p><p><br/>&nbsp;&nbsp;&nbsp; Background {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groundAngle [ 0.9, 1.5, 1.57 ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groundColor [<br/>&nbsp;0 0.333 0,&nbsp;0 0.4 0,<br/>&nbsp;0 0.5 0,&nbsp;0.62 0.67 0.60<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skyAngle [ 0.9, 1.5, 1.57 ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skyColor [<br/>&nbsp;0.21 0.18 0.66,&nbsp;0.2 0.44 0.85,<br/>&nbsp;0.51 0.81 0.95,&nbsp;0.77 0.8 0.82<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br/>&nbsp;&nbsp;&nbsp; }<br/>DEF INITVIEW Viewpoint{position 0 0 4&nbsp; description "init_view"}</p><p><br/>vr.wrl <br/>#VRML V2.0 utf8<br/>DEF MYMATERIAL Material{<br/>&nbsp;&nbsp;&nbsp; diffuseColor 0 1 0<br/>&nbsp;&nbsp;&nbsp; shininess 1<br/>}<br/>DEF BALL Transform{<br/>&nbsp;&nbsp;&nbsp; children&nbsp; Shape{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appearance Appearance{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; material USE MYMATERIAL<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geometry Sphere{radius 0.3}<br/>&nbsp;&nbsp;&nbsp; }<br/>}<br/>&nbsp;&nbsp;&nbsp; Background {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groundAngle [ 0.9, 1.5, 1.57 ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groundColor [<br/>&nbsp;0 0.333 0,&nbsp;0 0.4 0,<br/>&nbsp;0 0.5 0,&nbsp;0.62 0.67 0.60<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skyAngle [ 0.9, 1.5, 1.57 ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skyColor [<br/>&nbsp;0.21 0.18 0.66,&nbsp;0.2 0.44 0.85,<br/>&nbsp;0.51 0.81 0.95,&nbsp;0.77 0.8 0.82<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br/>&nbsp;&nbsp;&nbsp; }</p><p>DEF INITVIEW Viewpoint{position 0 0 4&nbsp; description "init_view"}</p><p><br/>Back to Top CtlVrml.java <br/>import java.awt.*;<br/>import java.applet.*;<br/>import vrml.external.Browser;<br/>import vrml.external.Node;<br/>import vrml.external.field.EventInSFColor;</p><p>public class CtlVrml extends Applet {<br/>&nbsp;&nbsp;&nbsp; Scrollbar scrBar[]=new Scrollbar[3];<br/>&nbsp;&nbsp;&nbsp; Label labelColor[]=new Label[3];<br/>&nbsp;&nbsp;&nbsp; Label labelDemo;<br/>&nbsp;&nbsp;&nbsp; Browser browser;<br/>&nbsp;&nbsp;&nbsp; Node myMaterial;<br/>&nbsp;&nbsp;&nbsp; String Text[]={"R=","G=","B="};<br/>&nbsp;&nbsp;&nbsp; boolean isScenceLoading=true&nbsp; ;<br/>&nbsp;&nbsp;&nbsp; public void start(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(isScenceLoading){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser=Browser.getBrowser(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myMaterial=(Node)(browser.getNode("MYMATERIAL"));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isScenceLoading=false;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelDemo.setText("DemoLabel");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e){labelDemo.setText("VRML Loading");}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void init() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setLayout(null);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resize(240,240);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setBackground(Color.green);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;3;i++){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrBar=new Scrollbar(Scrollbar.HORIZONTAL);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(scrBar);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrBar.reshape(0,15+45*i,200,20);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scrBar.setValues(50,0,0,101);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelColor=new Label(Text+scrBar.getValue(),Label.LEFT);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(labelColor);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelColor.setBackground(Color.green);</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelColor.reshape(200,15+45*i,40,20);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelDemo=new Label("DemoLabel",Label.CENTER);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(labelDemo);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelDemo.reshape(90,160,60,60);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelDemo.setBackground(new Color(122,122,122));<br/>&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;&nbsp;&nbsp; public boolean handleEvent(Event event) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;3;i++){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (event.id == Event.SCROLL_LINE_UP &amp;&amp; event.target == scrBar) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setColorLabel(event,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (event.id == Event.SCROLL_LINE_DOWN &amp;&amp; event.target == scrBar) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setColorLabel(event,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (event.id == Event.SCROLL_ABSOLUTE &amp;&amp; event.target == scrBar) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setColorLabel(event,i);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return super.handleEvent(event);<br/>&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;&nbsp;&nbsp; public void setColorLabel(Event ev,int i) {</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Color demoColor;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelColor.setText(Text+scrBar.getValue());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; demoColor=new Color((int)(2.55*scrBar[0].getValue()),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (int)(2.55*scrBar[1].getValue()),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (int)(2.55*scrBar[2].getValue())<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; labelDemo.setBackground(demoColor);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float value[]=new float[3];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EventInSFColor newColor=(EventInSFColor)myMaterial.getEventIn("set_diffuseColor");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(i=0;i&lt;3;i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value=(float)(scrBar.getValue()/100f);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; newColor.setValue(value);</p><p>&nbsp;&nbsp;&nbsp; }<br/>}</p><p></p><p>vr.wrl</p><p>Back To Top</p><p>#VRML V2.0 utf8<br/>DEF BALL Transform{<br/>&nbsp;&nbsp;&nbsp; children&nbsp; Shape{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appearance Appearance{ material Material{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; diffuseColor 1 0 0<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shininess 1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; geometry Sphere{radius 0.3}<br/>&nbsp;&nbsp;&nbsp; }<br/>}<br/>DEF POS PositionInterpolator{<br/>&nbsp;&nbsp;&nbsp; key[0,0.25,0.5,0.75,1.0]<br/>&nbsp;&nbsp;&nbsp; keyValue[1 1 1, 2 2 2,4 4 4,2 2 2,1 1 1]</p><p>}<br/>DEF TIMER TimeSensor{<br/>&nbsp;&nbsp;&nbsp; loop TRUE<br/>&nbsp;&nbsp;&nbsp; cycleInterval 8<br/>}<br/>ROUTE TIMER.fraction_changed TO POS.set_fraction<br/>ROUTE POS.value_changed TO BALL.set_scale</p><p><br/>&nbsp;&nbsp;&nbsp; Background {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groundAngle [ 0.9, 1.5, 1.57 ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; groundColor [<br/>&nbsp;0 0.333 0,&nbsp;0 0.4 0,<br/>&nbsp;0 0.5 0,&nbsp;0.62 0.67 0.60<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skyAngle [ 0.9, 1.5, 1.57 ]<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; skyColor [<br/>&nbsp;0.21 0.18 0.66,&nbsp;0.2 0.44 0.85,<br/>&nbsp;0.51 0.81 0.95,&nbsp;0.77 0.8 0.82<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ]<br/>&nbsp;&nbsp;&nbsp; }</p><p>DEF INITVIEW Viewpoint{position 0 0 4&nbsp; description "init_view"}<br/></p>

    该用户从未签到

    升级  30.8%

    11
     楼主| 发表于 2006-4-24 08:43:08 | 只看该作者
    <p>Java代码</p><p>iport java.awt.*;<br/>import java.applet.*;<br/>import vrml.external.Browser;<br/>import vrml.external.Node;<br/>import vrml.external.field.EventInSFVec3f;<br/>import vrml.external.field.EventOutSFVec3f;</p><p>public class eai_test extends java.applet.Applet implements Runnable{<br/>&nbsp;&nbsp;&nbsp; Browser browser;<br/>&nbsp;&nbsp;&nbsp; Node ball;<br/>&nbsp;&nbsp;&nbsp; Node Timer;<br/>&nbsp;&nbsp;&nbsp; Button btn_click;<br/>&nbsp;&nbsp;&nbsp; int appletSize[]={100,125};//width and height<br/>&nbsp;&nbsp;&nbsp; float scaleOfBall[]={1,1};<br/>&nbsp;&nbsp;&nbsp; boolean isBig;<br/>&nbsp;&nbsp;&nbsp; Thread clockThread =null;</p><p>&nbsp;&nbsp;&nbsp; public void run(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repaint();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scaleOfBall[0]=(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((EventOutSFVec3f)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (ball.getEventOut("scale_changed"))).getValue()<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )[0];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scaleOfBall[1]=scaleOfBall[0];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(Exception e){}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{Thread.sleep(100);}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch(InterruptedException e){}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void start(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(clockThread ==null){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clockThread =new Thread(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clockThread.start();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; browser=Browser.getBrowser(this);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ball=(Node)(browser.getNode("BALL"));<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void paint(Graphics g){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(Color.green);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillRect(0,0,appletSize[0],appletSize[1]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.setColor(Color.red);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int x,y,radius; //Ball of Applet</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int centerX=(int)(appletSize[0]/2.0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int centerY=(int)(appletSize[0]/2.0);</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; radius=(int)(scaleOfBall[0]*appletSize[0]/3.0);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; x=(int)(centerX-radius);y=(int)(centerY-radius);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g.fillOval(x,y,2*radius,2*radius);<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void stop(){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clockThread.stop();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clockThread = null;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }catch (Exception e){}<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void init() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.init();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; setLayout(null);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; resize(appletSize[0],appletSize[1]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btn_click=new Button("Make Ball Large");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add(btn_click);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btn_click.reshape(0,100,100,25);<br/>&nbsp;&nbsp;&nbsp; }</p><p>&nbsp;&nbsp;&nbsp; public boolean handleEvent(Event event) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (event.id == Event.ACTION_EVENT &amp;&amp; event.target == btn_click) {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clickedBtnClick();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return super.handleEvent(event);<br/>&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp; public void clickedBtnClick() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EventInSFVec3f scale=<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (EventInSFVec3f)ball.getEventIn("set_scale");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float value[]=new float[3];<br/>&nbsp;&nbsp;&nbsp; public void clickedBtnClick() {<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EventInSFVec3f scale=<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (EventInSFVec3f)ball.getEventIn("set_scale");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; float value[]=new float[3];<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(isBig){<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;3;i++) value=1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btn_click.setLabel("Make Ball Large");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;3;i++) value=1.5f;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btn_click.setLabel("Make Ball Small");<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scale.setValue(value);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; isBig=!isBig;<br/>&nbsp;&nbsp;&nbsp; }<br/>}</p><p><br/>???? </p><p></p>

    该用户从未签到

    升级  30.8%

    10
     楼主| 发表于 2006-4-24 08:42:14 | 只看该作者
    <p>我们以“旋转几何体”为例子,讲解一下VRML与JAVA的接口技术。由于VRML只有方体、圆锥体、圆柱体、球等几种基本的形体,因而,要建立复杂的几何体,只能利用基本形体重叠的方式来建立。本例子演示的效果是一个菱形绕着它的中心轴旋转一周,因此,我们采用JAVA动态生成的方式来制作。每生成一个菱形就绕着中心轴旋转 1 度,循环180次(一周)就可以达到我们所要求的效果了。下面是VRML文件的代码,十分简单。 <br/>#VRML V2.0 utf8</p><p>Background {skyColor 1 1 1}<br/>DEF OBJ Transform {<br/>  children [<br/>    DEF TS TouchSensor {}<br/>    DEF shape Transform {<br/>          rotation 0 0 1 0.785398<br/>          children [<br/>            Shape {<br/>              appearance Appearance {<br/>                material Material {<br/>                  diffuseColor 0.5 0.2 0.7<br/>                }<br/>              }<br/>              geometry Box {size 5 5 0.2}<br/>            }<br/>          ]<br/>    }<br/>  ]<br/>}<br/>DEF Rot Script{<br/>    url "Rotation.class"<br/>    eventIn SFBool touched<br/>    eventOut MFNode RotIt<br/>}</p><p>ROUTE TS.isActive TO Rot.touched<br/>ROUTE Rot.RotIt TO OBJ.addChildren</p><p>  利用URL连接“Rotation.class”,变量touched作为事件的传入口,变量RotIt作为事件的出口。当接触传感器TS检测到鼠标被按下后,“ROUTE TS.isActive TO Rot.touched”使touched的值变为真。下面的JAVA程序被加载执行。 <br/>//Rotation.java<br/>import java.util.*;<br/>import vrml.*;<br/>import vrml.node.*;<br/>import vrml.field.*;<br/>//线程接口 <br/>public class Rotation extends Script implements Runnable{<br/>  MFNode RotIt;<br/>  int k;<br/>  float R=1.0f;<br/>  Thread clockThread =null;<br/>//初始化,取得RotIt的值 <br/>  public void initialize(){<br/>    RotIt = (MFNode)getEventOut("RotIt");<br/>  }<br/>  //生成新的线程,循环180次<br/>  public void run(){<br/>    for(k=0;k&lt;181;k++){<br/>      R=(float)k/180*3.1415926f;<br/>      rotation();<br/>        try{Thread.sleep(10);} //暂停10毫秒<br/>          catch(InterruptedException e){}<br/>        }<br/>    }<br/>  //开始线程 <br/>  public void start(){<br/>    if(clockThread ==null){<br/>      clockThread =new Thread(this);<br/>      clockThread.start();<br/>    }<br/>  }<br/>  //停止线程 <br/>  public void stop(){<br/>    try{<br/>      clockThread.stop();<br/>      clockThread = null;<br/>    }catch (Exception e){}<br/>  }</p><p><br/>  //动态增加节点<br/>  public void rotation() {<br/>      String Rotation1 =<br/>        "Transform {" +<br/>        "  rotation 0 1 0 ";<br/>      String Rotation2 =<br/>        "  children [" +<br/>        "Transform {" +<br/>        "  rotation 0 0 1 0.785398" +<br/>        "  children [" +<br/>        "    Shape {" + <br/>        "      appearance Appearance {" +<br/>        "        material Material {" +<br/>        "          diffuseColor 0.5 0.2 0.7" +<br/>        "        }" +<br/>        "      }" +<br/>        "      geometry Box {size 5 5 0.2}" +<br/>        "    }" +<br/>        "  ]" +<br/>        "}]" +<br/>        "}";<br/>      //取得VRML浏览器的句柄,产生一个新的节点<br/>      Browser browser = getBrowser();<br/>      BaseNode baseNodes[];<br/>      //利用createVrmlFromString接口函数生成新的形体并检测异常<br/>      try{<br/>        baseNodes = browser.createVrmlFromString(Rotation1 + R +<br/>                             Rotation2); <br/>        //设置新的RotTt值并传送回VRML中<br/>        if(null != baseNodes) {<br/>          RotIt.setValue(baseNodes);<br/>        }<br/>      } catch (Exception ex) {<br/>        ex.printStackTrace() ;<br/>      }<br/>      <br/>    }<br/> //接收事件,取得touched变量的值<br/>  public void processEvent(Event ev) {<br/>   if(ev.getName().equals("touched")){<br/>    start();<br/>    }<br/>  }<br/>} <br/>  VRML接收到JAVA传回的值后触发OBJ节点新增加一个子节点,从而形成我们所看到的效果。</p>

    该用户从未签到

    升级  30.8%

    9
     楼主| 发表于 2006-4-24 08:41:44 | 只看该作者
    <p>5.17 MFVec2f 对象<br/>MFVec2f 对象对应于 VRML 2.0 MFVec2f 域。用来存储 SFVec2f 对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用&nbsp; ( 例如 mfVec2fObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为 SFVec2f ( 0 , 0 ) 。 </p><p>创建方法<br/>mfVec2fObjectName = new MFVec2f([SFVec2f, SFVec2f, ...])&nbsp; <br/>此创建方法可用0个或多个SFVec2f值对数组进行初始化。 <br/>属性<br/>length&nbsp; <br/>数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数.&nbsp; <br/>方法<br/>无 </p><p>5.18 MFVec3f 对象<br/>MFVec3f 对象对应于 VRML 2.0 MFVec3f 域。它是被用来存储 SFVec3f 对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfVec3fObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为 SFVec3f ( 0 , 0 , 0 ) 。&nbsp; </p><p>创建方法<br/>mfVec3fObjectName = new MFVec3f([SFVec3f, SFVec3f, ...])&nbsp; <br/>此创建方法可用0个或多个SFVec3f值对数组进行初始化。 <br/>属性<br/>length&nbsp; <br/>数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数.&nbsp; <br/>方法<br/>无 </p><p>5.19 VrmlMatrix 对象<br/>VrmlMatrix 对象在 4x4 矩阵上施行操作提供了许多有效的方法。矩阵的每个元素可使用 C 风格的数组形式访问( 即, vrmlMatrixObjectName [ 0 ][ 1 ] 是在 0 行, 1 列的元素) 。 </p><p>创建方法<br/>vrmlMatrixObjectName = new VrmlMatrix(f11, f12, f13, f14, f21, f22, f23, f24, f31, f32, f33, f34, f41, f42, f43, f44)&nbsp; <br/>产生一个新的矩阵,通过f11 到 f44对矩阵初始化。 <br/>vrmlMatrixObjectName = new VrmlMatrix()&nbsp; <br/>产生一个新的同一矩阵 <br/>属性<br/>无&nbsp; <br/>方法<br/>setTransform(translation, rotation, scaleFactor, scaleOrientation, center)&nbsp; <br/>设置 VrmlMatrix 值。translation 是一个 SFVec3f 对象, rotation 是一个 SFRotation 对象, scaleFactor 是一个 SFVec3f 对象, scaleOrientation 是一个 SFRotation 对象,center 是一 SFVec3f 对象。任何最右边的参数可以被省略。换句话说, 方法可以取 0 ~ 5 个参数。例如, 你能指定0个参数 ( 一个单位矩阵 ), 1个参数 ( 一个 translation ), 2个参数 ( 一个 translation 和 rotation ), 3个参数 ( 一个 translation, rotation 和一个 scaleFactor) 。 <br/>getTransform(translation, rotation, scaleFactor)&nbsp; <br/>分解 VrmlMatrix 并且返回对象的 translation, rotation, 和 scaleFactor 部件。参数的类型与在 setTransform 一样。矩阵的其他信息被忽略。 <br/>inverse()&nbsp; <br/>返回值是对象逆矩阵的 VrmlMatrix 。&nbsp; <br/>transpose()&nbsp; <br/>返回值是对象转制矩阵的 VrmlMatrix 。 <br/>multLeft()&nbsp; <br/>返回值是对象矩阵左乘积的 VrmlMatrix 。 <br/>multRight(matrix)&nbsp; <br/>返回值是对象矩阵右乘积的 VrmlMatrix 。 <br/>multVecMatrix(vec)&nbsp; <br/>返回值是行矢量乘积的 SFVec3f 。 <br/>multMatrixVec(vec)&nbsp; <br/>返回值是列矢量乘积的 SFVec3f 。 <br/> </p><p></p>

    该用户从未签到

    升级  30.8%

    8
     楼主| 发表于 2006-4-24 08:41:23 | 只看该作者
    <p>5.11 MFColor 对象<br/>MFColor 对象对应于 VRML 2.0 MFColor 域。它被用来存储 SFColor 对象的一个一维数组。数组的单个单元可使用标准的 C 语法引用( 例如 mfColorObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数 )。所有的单元的初始默认值为 SFColor ( 0 , 0 , 0 ) 。&nbsp; </p><p>创建方法<br/>mfColorObjectName = new MFColor([SFColor, SFColor, ...])&nbsp; <br/>方法能以 0 个或 0 以上的数值初始化数组单元。 <br/>属性<br/>length&nbsp; <br/>在数组中包含单元数字的个数。 <br/>方法<br/>无 </p><p>5.12 MFFloat 对象<br/>MFFloat 对象对应于 VRML 2.0 MFFloat 域。它被用来存储 SFFloat 对象的一个一维数组。数组中的单个单元能使用标准的 C 语法对其操作 ( 例如 mfFloatObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数 )。所有的单元的初始默认值为 0.0 。&nbsp; </p><p>创建方法<br/>mfFloatObjectName = new MFFloat([number, number...])&nbsp; <br/>方法能以 0 个或 0 以上的数值初始化数组单元。 <br/>属性<br/>length&nbsp; <br/>在数组中单元包含数字的个数。 <br/>方法<br/>无 </p><p>5.13 MFInt32 对象 <br/>MFInt32 对象对应于 VRML 2.0 MFInt32 域。它被用来存储 SFInt32 对象的一个一维数组。数组中的单个单元能使用标准的 C 语法对其操作 ( 例如 mfInt32ObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数 )。所有的单元的初始默认值为 0 。&nbsp; </p><p>创建方法<br/>mfInt32ObjectName = new MFInt32([number, number, ...])&nbsp; <br/>方法能以 0 个或 0 以上的数值初始化数组单元。 <br/>属性<br/>length&nbsp; <br/>数组中元素个数的整数值,通过给length赋值可改变数组中元素的个数。 <br/>方法<br/>无 </p><p>5.14 MFNode 对象<br/>MFNode 对象对应于 VRML 2.0 MFNode 域。它被用来存储 SFNode 对象的一个一维数组。数组中的单个单元能使用标准的 C 语法对其操作 ( 例如 mfInt32ObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数 )。所有的单元的初始默认值为 NULL。&nbsp; </p><p>创建方法<br/>mfNodeObjectName = new MFNode([SFNode, SFNode, ...])&nbsp; <br/>方法能以 0 个或 0 以上的 SFNode 值初始化数组单元。&nbsp; <br/>属性<br/>length&nbsp; <br/>数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数.&nbsp; <br/>方法<br/>无 </p><p>5.15 MFRotation 对象<br/>MFRotation 对象对应于 VRML 2.0 MFRotation 域。用来存储 SFRotation 对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfRotationObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为 SFRotation ( 0 , 0 , 1 , 0 ) 。&nbsp; </p><p>创建方法<br/>mfRotationObjectName = new MFRotation([SFRotation, SFRotation, ...])&nbsp; <br/>此创建方法可用0个或多个SFRotation值对数组进行初始化。 <br/>属性<br/>length&nbsp; <br/>数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数.&nbsp; <br/>方法<br/>无 </p><p>5.16 MFString Object<br/>对象 MFString 对象对应于 VRML 2.0 MFString 域。用来存储字符串对象的一个一维数组。数组的单个的单元能使用标准的 C 风格操作符来引用 ( 例如 mfStringObjectName [ 索引 ], 在此索引值是大于等于0,小于数组长度的整数。所有的单元的初始默认值为空字符串</p><p>创建方法<br/>mfStringObjectName = new MFString[string, string, ...])&nbsp; <br/>此创建方法可用0个或多个SFString值对数组进行初始化。 <br/>属性<br/>length&nbsp; <br/>数组中元素的个数的整数值,通过给length赋值可改变数组中元素的个数.&nbsp; <br/>方法<br/>无 </p>
    您需要登录后才可以回帖 登录 | 马上注册

    本版积分规则

    小黑屋|手机版|Archiver|信息系统项目管理师_软考交流平台. ( 鄂ICP备11002878号-1  公安备案号:42011102001150

    GMT+8, 2025-7-6 01:58

    Software by Discuz! X3.2

    © 2001-2013 SKIN BY DSVUE

    快速回复 返回顶部 返回列表