//EditPlus命令: ctrl+shift+D,ctrl+M
//version 【 2012年3月14日 10:55】
//------------js3d.js封装---------------------------------------------------------------------------
<script src="js3d.js"></script>
<body onLoad="initAjax3d()">
<div class="content">
<embed WIDTH=100% HEIGHT=100% NAME="PowerSpotLight" SRC="3dsence.wrl" TYPE="model/vrml">
</div>
</body>
parent.main3d.setv('sbqview','gotoView','bq1')
var PowerS = document.PowerSpotLight.getBrowser();
var browser = PowerS.getExecutionContext();
var node = browser.getNode(n);
var scene = browser.createHRMSceneFromString(str);
var node = browser.getNode(n, "DEFNode"); // 取节点
browser.deleteNode(node);
function setv(n,f,v)
{
var node = browser.getNode(n);
var ff = node.getField(f);
ff.value =ft.value;
}
//获取节点参数
function getv(n,f)
{
var node = browser.getNode(n); // 取节点
var ff = node.getField(f);
return ff.value|| ff.valueString||ff.get1Value(0);
}
//添加新的VRML对象
var vrml ="Shape { geometry Cylinder {height 10}}"
RTaddscene("abc","Viewpoint {position 10 10 10 description \"10\"}"+vrml)
//------------Browser对象方法---------------------------------------------------------------------------
Browser.addRoute(/*fromNode, fromEventOut, toNode, toEventIn*/);
Browser.createVrmlFromString(/*vrmlSyntax*/);
Browser.createVrmlFromURL(/*url, node, event*/);
Browser.deleteRoute(/*fromNode, fromEventOut, toNode, toEventIn*/);
Browser.getCurrentFrameRate();
Browser.getCurrentSpeed();
Browser.getName();
Browser.getVersion();
Browser.getWorldURL();
Browser.loadURL(/*url, parameter*/);
Browser.replaceWorld(/*nodes*/);
Browser.setDescription(/*description*/);
//------------------------------基本语法 -------------------------------------------------------------
Transform {
scale 20 20 20 #//缩放比例
rotation 1 1 1 -1 #//旋转
translation 100 0 300 #//空间位置
children [
Shape {
appearance Appearance {material Material { diffuseColor 1 0 0}} #// 要点
geometry Box {} #// 要点
}
]
}
//--拖拽 = 转圈 效果
#VRML V2.0 utf8
DEF ss SphereSensor { #// 要点
enabled TRUE
offset 0.0 1.0 0.0 0.0
autoOffset TRUE
}
Transform {
children [
DEF tr Transform {
children Shape {geometry Box {}}
}
]
}
ROUTE ss.rotation_changed TO tr.set_rotation #// 要点 指向某一个Transform
//拖拽 = 移动
Group {
children [
DEF ps PlaneSensor { #// 要点
enabled TRUE
offset 0.0 0.0 0.0
autoOffset TRUE
minPosition 0 0
maxPosition -1 -1
}
DEF ss SphereSensor {
enabled TRUE
offset 0.0 1.0 0.0 0.0
autoOffset TRUE
}
DEF tr Transform {
children Shape {geometry Sphere {}}
}
]
}
ROUTE ps.translation_changed TO tr.set_translation #// 要点
//不能移动目标
Transform {
children [
DEF ts TouchSensor {enabled TRUE} #// 要点
Shape {geometry Box {}}
]
}
//点击图形 让图形动起来
#//造型
DEF tr Transform {
children[Shape {geometry Box {} } ]
}
#//位置插补器 PositionInterpolator
DEF path PositionInterpolator { #// 位置插补器
key [0 .25 .5 .75 1]
keyValue [ 0 0 0, 3 0 0, 3 3 0, 0 3 0, 0 0 0]
}
#//传感器
DEF time TimeSensor {cycleInterval 5 } #//时间传感器
DEF touch TouchSensor {} #//接触传感器
//-------------------END
#//路由
ROUTE touch.touchTime TO time.startTime #// 要点
ROUTE time.fraction_changed TO path.set_fraction #// 要点
ROUTE path.value_changed TO tr.translation #// 要点
//位置插入器 PositionInterpolator
DEF tr Transform {
children [
Shape {geometry Box {}}
DEF ci CoordinateInterpolator { # // AAA
key [ 0 0.5 1 ]
keyValue [ 0 0 0, 0 3 0, 0 0 0 ]
}
DEF ts TimeSensor {
cycleInterval 2
loop TRUE #//default is false
}
]
}
ROUTE ts.fraction_changed TO ci.set_fraction #//AAA
ROUTE ci.value_changed TO tr.set_translation #//AAA
//-------------------END
//use的使用
NavigationInfo {
avatarSize [0.25, 1.6, 0.75]
headlight TRUE
speed 1.0
type "WALK"
visibilityLimit 0.0
}
Viewpoint { position 0 1.6 10}
Shape {
appearance DEF ap Appearance { material Material {}}
geometry Box { size 20 0.01 20}
}
Shape {
appearance USE ap #// use 已经存在的颜色
geometry Box { size 5 0.5 1}
}
Transform {
translation 0 0.5 -0.5
children
Shape {
appearance USE ap
geometry Box { size 5 0.5 1}
}
}
#//公示牌 始终面对用户
Billboard { #//重点
children [
Shape {
geometry Text {string "ABC"}
}
]
}
#//侧面面对用户
rotation 0 1 0 1.75
#//背景
Background {
# groundColor0 .6 0
skyAngle[ .785, 1.57 ]
skyColor .3 .4 .5
backUrl"tex/ocean_3_back.jpg"
frontUrl"tex/ocean_3_front.jpg"
leftUrl"tex/ocean_3_left.jpg"
rightUrl"tex/ocean_3_right.jpg"
topUrl"tex/ocean_3_top.jpg"
bottomUrl"tex/ocean_3_bottom.jpg"
}
#//咋类
NavigationInfo { type "EXAMINE"}
Viewpoint {description "z 10" position 0 0 10 orientation 1 0 0 0}
DirectionalLight {
intensity 1.0 #//强度
color 1 0 0
}
PointLight {
radius 10
color 1 0 0
location 0 5 -2
}
WorldInfo {
title "my wordinfo title"
info ["a","b"]
}
Fog {
color 0.2 0.8 0.2
fogType "LINEAR" #//类型:LINEAR EXPONENTAL
}
#//用盒子限制用户浏览范围 (3000 * 3000 * 8000)(井偏左右各1000米,再预留1000空间 预留上下左右各自1000米的空间)
#//原理:使用模型边界 和 透明效果 实现。
#//把transparency 0 改成transparency 1 就可以
Transform {
translation 0 -500 0 # (-5000/2 + 2000)
children [
#//上下包裹
Transform {
translation 0 4000 0
children [Shape {geometry Box {size 3000 .1 3000} appearance Appearance {material Material {diffuseColor 1 0 0 transparency 0} }}]
}
Transform {
translation 0 -4000 0
children [Shape {geometry Box {size 3000 .1 3000} appearance Appearance {material Material {diffuseColor 1 1 0 transparency 0}}}]
}
#//左右包裹
Transform {
translation 1500 0 0
children [Shape {geometry Box {size .1 8000 3000} appearance Appearance {material Material {diffuseColor 1 0 1 transparency 0}}}]
}
Transform {
translation -1500 0 0
children [Shape {geometry Box {size .1 8000 3000} appearance Appearance {material Material {diffuseColor 1 0 0 transparency 0} }}]
}
#//前后包裹
Transform {
translation 0 0 1500
children [Shape {geometry Box {size 3000 8000 .1} appearance Appearance {material Material {diffuseColor 0 0 0 transparency 0} }}]
}
Transform {
translation 0 0 -1500
children [Shape {geometry Box {size 3000 8000 .1} appearance Appearance {material Material {diffuseColor 1 1 0 transparency 0} }}]
}
]
}
//-------------------END
#//控制用户操作的速度。
#//移动速度变为十分之一,然后提供跟多视点供用户选择
NavigationInfo {
speed 0.1 #//重点
}
#//控制台打印信息
Browser.print('hello word:');
//-------------------END
#//定义传感器
DEF lightSwitch Group {
children [
Shape {
geometry Box {}
}
DEF touchSensor TouchSensor {} #//为当前Group定义点击传感器(可以捕捉用户的点击操作)
]
}
DEF lightSwitch Group {
children [
Shape {
geometry Box {size 4 4 4 }
}
Shape {
geometry Cylinder {height 40}
}
DEF ts TouchSensor {} #//为当前Group定义点击传感器(可以捕捉用户的点击操作)
]
}
//-------------------END
#//传感器和路由的使用(按住后自动切换视角)
DEF view_zero Viewpoint {
position 5 0 20
description "0"
}
DEF view_qf Viewpoint {
position 5 50 200
#orientation 0 1 0 -0.75
description "正前方"
}
#//用户按住传感器 切换视点
#ROUTE ts.isActive TO view_qf.set_bind
//-------------------END
#//Script节点语法
DEF MyScript Script{
directOutput TRUE
mustEvaluate TRUE
field MFNode tr USE tr #//定义了方法可以操控的节点
#eventIn SFBool changePos #//定义了方法的参数类型:Boolean类型 (只能传递一个参数??)
eventIn SFFloat changePos #//定义了方法的参数类型:Float类型 (只能传递一个参数??)
url "javascript: //这个Javascript必须有 --------------------------------------
function changePos(x,t){
Browser.print('changePos x = '+x+',,t = '+t); #//控制台打印
}
"
}
#//锚点的使用
Anchor{
url"javascript:test('xudajian');" #//直接调用JS方法
#//指定方法所在的Iframe (默认为_self) 或者 Browser.loadURL('javascript:externalFunction()', param);
#//parameter["target=_self"]
children[ Shape {geometry Box{}}]
}
//-------------------END
#//定义Script节点
DEF MyScript Script
{
#//定义Script节点的域(field)
field SFNode cyj1 USE cyj1 #//引用已经存在对象作为属性的写法
#directOutput TRUE #//似乎True也没有什么区别
#mustEvaluate TRUE
#eventIn SFBool start
#//定义当前SCript节点的入口(eventIn)
#//事件入口和事件的处理方法必须同名
eventIn SFBool pause #//暂停方法
eventIn SFBool resume #//重新启动
eventIn SFTime speed #//更改速度
url "javascript:
function initialize() {
//start(true,t); #//可应用于初始化
}
function pause (v,t)
{
if (v){
cyj1.pauseTime=t;
}
}
function resume (v,t)
{
if (v){
cyj1.resumeTime=t; ;
}
}
function speed (v,t)
{
Browser.print('速度speed:'+v);
if (v>=1 && v<=20) {
cyj1.enabled=false;
cyj1.cycleInterval =v;
cyj1.enabled=true;
Browser.print('cyj1.cycleInterval:'+cyj1.cycleInterval);
}
}
"#//URL END
}
//-------------------END----------------------------------
//-----------------------------------自定义VRML节点-----------------
#VRML V2.0 utf8
#//TODO 自定义节点 (MyBox 是节点名称)
PROTO MyNode[
#//TODO 自定义用户设置参数 (必须设置默认值)
#//TODO 注意,尽量使用Float,少用int
field SFFloat p_node_size 0
field SFRotation p_node_rota 0 0 0 0
field SFVec3f p_node_trans 0 0 0
]{
#//TODO 节点内容 or body
DEF rootForm Transform {}
Script {
#//TODO 脚本变量 (用来引用用户传递参数)
#//TODO 使用USE 和 IS进行参数引用
#//TODO USE 表示对象引用(引用节点对象),IS表示赋值操作(获取用户设置的参数)
field SFNode root USE rootForm
field SFFloat node_size IS p_node_size
field SFRotation node_rote IS p_node_rota
field SFVec3f node_trans IS p_node_trans
url "javascript:
/**
* 通过字符串创建Node节点并添加到Root 的children中
* @param str 构成节点的字符串(不允许有双引号\"出现)
* @return 一个TransForm的字符串
*/
function add(str){
root.addChildren = Browser.createVrmlFromString(str);
}
//TODO 初始化方法(自动执行)
function initialize(){
//Browser.print('box_size = '+box_size+',str ='+str);
add('Shape {geometry Cone {height 3}}');
add(makeATransform(node_trans,node_rote,'Shape {geometry Box {size '+node_size+' 2 2 }}'));
}
/**
* TODO 创建一个TransForm
* @param pos 空间位置字符串形如 '1 1 1'
* @param rot 旋转值字符串形如 '1 1 1 0.75'
* @param child 子节点字符串 'Shape {geometry Box {size '+box_size+' 2 2 }}'
* @return 一个TransForm的字符串
*/
function makeATransform (pos,rot,child)
{
var str = 'Transform{';
str += 'translation '+pos+' ';
str += 'rotation '+rot+' ';
str += 'children ['+child+']}';
Browser.print('makeATransform = '+str);
return (str);
}
" #//url END
}
}
MyNode{
p_node_size 2
p_node_rota 1 0 0 1 #//TODO x,y,z不能全部为0,否则不显示
p_node_trans -1 -1 1
}
//-----------------------------------END----------------------------
#//Script节点语法
DEF MyScript Script{
directOutput TRUE
mustEvaluate TRUE
#//TODO (注意必须是【SFNode】节点)
field SFNode aMyBox USE MyBox #//定义了方法可以操控的节点(注意必须是【SFNode】节点)
eventIn SFBool changePos #//定义了方法的参数类型:Float类型 (只能传递一个参数??)
url "javascript: //这个Javascript必须有 --------------------------------------
function changePos(x,t){
Browser.print('changePos x = '+x+',t = '+t); //控制台打印
Browser.print(aMyBox.getField('size'));// = new MFVec3f(10,2000,10);
aMyBox.size = new SFVec3f(10,2000,10);//TODO 类型一定要和属性的类型对上(使用new的方法实现。)
//var context = Browser.currentScene; //【vrmlscript下获取上下文】
//var msnode = context.getNode('test_material');
//msnode.diffuseColor =new SFColor(0,1,0);
//Browser.print(msnode.diffuseColor);
}
"
}
//js调用:
setv('MyScript','changePos',true);
//---------------待整理(参考使用)----------------------------------------------------
DEF seditbqmov Script
{
directOutput TRUE
mustEvaluate TRUE
eventIn SFInt32 bsweditmovgasID
eventIn SFTime tick
url "javascript:
function bsweditmovgasID (v,t)
{
var context = Browser.currentScene;
var bqgas1 = context.getNode('bqgas1');
var bqgas2 = context.getNode('bqgas2');
bqgas1.state=7;
bqgas2.state=7;
var timegas = context.getNode('timegas');
timegas.enabled=true;
}
function n2color (v){
return color=new SFColor(0, 1-v*2, 0);
}
function tick (t){
var context = Browser.currentScene;
var bqgas1 = context.getNode('bqgas1');
var bqgas2 = context.getNode('bqgas2');
bqgas1.text[1]='温度'+(Math.random()*50+20);
bqgas2.text[1]='温度'+(Math.random()*1+0.7);;
bqgas1.fgColor=n2color(Math.random()*0.5+0.1);
bqgas2.fgColor=n2color(Math.random()*0.2+0.7);
}
"
}
var msnode = Browser.pickedNode;
Browser.print('name:' + msnode.name + ' Type:'+msnode.getType());
var mspt =Browser.mouseHitPoint;
Browser.print('点击的坐标:');
Browser.print(mspt[0]+','+mspt[1]+','+mspt[2]);
if (msnode.parent.getType()=='Transform')
var nameh=msnode.parent.name.substring(0,2);
if (msnode.appearance.texture.getType()=='MultiTexture')
var vppos=Browser.viewerPosition;
bqjs.position=mspt.add((vppos.subtract(zx)).multiply(0.001));
var nowtime = new SFTime();
var nowyea=nowtime.getYear();
var nowmon=nowtime.getMonth();
var nowday=nowtime.getDay();
var nowh=nowtime.getHour();
var nowm=nowtime.getMinute();
var nows=nowtime.getSecond();
DEF gd Inline {url "gd.wrl"}
分享到:
相关推荐
1. **源代码编辑**:VRMLPad支持VRML97(也称为VRML2.0)标准,提供语法高亮、自动完成和错误检测,使得编写VRML脚本更加高效和准确。 2. **实时预览**:开发者可以在编辑的同时实时查看场景的3D预览,这有助于快速...
**JSP 2.0 基本语法详解** ...JSP 2.0是JSP的一个重要版本,...了解并掌握这些基本语法和特性,可以帮助初学者快速入门JSP 2.0,进一步探索Web开发的世界。通过实践和学习,可以利用JSP构建高效、可扩展的Web应用程序。
本文档旨在详细介绍 MVEL 2.0 的核心概念及其语法特点,帮助开发者更好地理解和运用这一工具。 #### 二、MVEL 2.0 表达式概述 MVEL 2.0 支持多种类型的表达式,包括但不限于属性表达式、布尔表达式、方法调用、...
JSP2.0 是该技术的一个重要版本,提供了多种语法特性来增强其功能性和灵活性。本篇文章将详细解读JSP2.0语法卡片中的各项知识点,帮助开发者更好地理解和应用这些特性。 #### 语法概述 在JSP2.0语法卡片中,主要...
像编译器一样,PC-lint Plus 解析您的源代码文件,执行语义分析,并构建一个抽象语法树来表示您的程序。从那里,PC-lint Plus 采用各种机制,包括数据流分析、抽象解释、价值跟踪、读写分析、强类型检查、函数语义...
**CSS2.0语法手册**是网页开发者的重要参考资料,它详细阐述了CSS(层叠样式表)2.0规范中的各种属性和值,帮助开发者精确地理解和应用这些样式规则。CSS2.0作为Web设计的核心技术之一,为网页带来了丰富的布局和...
《Flash ActionScript 2.0 语言参考》是学习和掌握Flash编程不可或缺的资源,尤其对于初学者和希望深入理解ActionScript的开发者来说,它提供了详尽的语法和功能介绍。ActionScript是Adobe Flash平台上用于创建交互...
MySQL+PHP常用语法与操作语句实例MySQL+PHP常用语法与操作语句实例MySQL+PHP常用语法与操作语句实例MySQL+PHP常用语法与操作语句实例MySQL+PHP常用语法与操作语句实例MySQL+PHP常用语法与操作语句实例MySQL+PHP常用...
mysql转换成oracle时的常用语法说明
这个压缩包“wxh 《spring2.0语法着色文档 .rar”包含了详细解释Spring 2.0核心语法和特性的着色文档,以PDF格式提供,方便学习和参考。 1. **Spring框架简介** Spring是一个开源的Java平台,主要用于简化企业级...
职称英语常用语法详解职称英语常用语法详解职称英语常用语法详解职称英语常用语法详解
虽然还是候选推荐标准,但 XPath 2.0 即将得到正式批准。这是 1999 年以来对 ...XPath 2.0 推荐标准是 XSLT 2.0 和 XQuery 1.0 的基础。这两种语言都以 XPath 作为核心查询引擎,并增加了一些语句来格式化查询结果。
### C#2.0新语法扩充详解:泛型、迭代器与匿名方法 #### 泛型(Generics) 在C#2.0中引入的**泛型**是一种强大的功能,它允许开发人员创建类型安全的组件,这些组件可以用于多种数据类型而无需编写额外的代码。...
用户可以通过学习其语法和函数库,实现更复杂的功能,如自动化工作流程、模拟鼠标点击、处理文本、控制硬件设备等。例如,你可以用它来自动化填写表单、批量重命名文件,甚至进行屏幕截图并自动上传到云存储服务。 ...
- **入门教程**:初学者可以从基础的C语言教程开始,逐步掌握语法和编程思维,然后使用Turbo C 2.0进行实践。 - **代码调试技巧**:学会如何利用Turbo C 2.0的调试工具分析程序运行状态,定位并解决问题。 - **...
【NOI2.0评测系统】是针对全国青少年信息学奥林匹克(NOI)竞赛的一项重要工具,它提供了在线评测参赛者代码的功能,确保比赛的公正性和效率。评测系统允许用户提交C++等编程语言的源代码,并自动运行测试用例进行评估...