`
web3d
  • 浏览: 86373 次
  • 性别: Icon_minigender_1
  • 来自: 南昌
社区版块
存档分类
最新评论

Virtools脚本语言(VSL)教程 - 值、类型与变量

 
阅读更多
<h3>值</h3>
<p>VSL能识别以下类型的值:</p>
<blockquote>
<li>数字,如123、3.14159、'v'或0xe0d02090</li>
<li>逻辑布尔值:true或false</li>
<li>字符,如"Virtools,The Behavior Company"</li>
<li>特殊关键字<em>null</em>等于</li>
</blockquote>
<h3>
<a name="TOC-2"></a>类型</h3>
<p>VSL是一种类型化的语言,这意味着如我们所知的在编译时(compilation time)每个变量和每个表达式都带有类型。类型决定了运算的意义;强类型可以帮助在编译时检查错误。</p>
<p>VSL类型划分为3类:</p>
<blockquote>
<li>基本类型</li>
<li>VSL结构类型</li>
<li>C++ 类/结构类型</li>
</blockquote>
<p></p>
<p>基本类型即布尔型(bool)与数字类型。数字类型为整型(<em>char,int</em>)及浮点型(<em>float</em>)。</p>
<p></p>
<table border="1" cellspacing="0" cellpadding="1"><tbody>
<tr>
<td valign="top"><strong>类型</strong></td>
<td valign="top"><strong>内容</strong></td>
<td valign="top"><strong>大小</strong></td>
<td valign="top">
<strong>取值范围</strong><br>
</td>
</tr>
<tr>
<td valign="top">bool</td>
<td valign="top">bool类型是一种整数类型。它用两个可能的值(用true或false来表示)代表逻辑数</td>
<td valign="top">4 Bytes</td>
<td valign="top">true 或false (0 or 1)</td>
</tr>
<tr>
<td valign="top">char</td>
<td valign="top">char类型也是一种整数类型,通常包含了ASCII字符集成员的执行。</td>
<td valign="top">4 Bytes</td>
<td valign="top">-128 to 127</td>
</tr>
<tr>
<td valign="top">int</td>
<td valign="top">int类型也是一种整数类型。等价于C/C++中的无符号的int类型。</td>
<td valign="top">4 Bytes</td>
<td valign="top">?147483647? to 2147483647</td>
</tr>
<tr>
<td valign="top">float</td>
<td valign="top">float类型是一种浮点数类型。等价于C/C++中的float类型。</td>
<td valign="top">4 Bytes</td>
<td valign="top">-3.402823466e+38F to 3.402823466e+38F</td>
</tr>
<tr>
<td valign="top">str</td>
<td valign="top">str类型等价于C/C+中的char*类型。</td>
<td valign="top">4 Bytes</td>
<td valign="top">-</td>
</tr>
</tbody></table>
<p></p>
<p>正如你所见,所有VSL基本类型都是以4个字节实现的,在内存中是字组对齐方式,不受它们是否需要更多空间的情况约束。例如,char类型仅需一个字节来表示ASCII码表中的成员,但在VSL中仍用了4个字节。</p>
<p></p>
<p>VSL结构是在VSL中创建自定义数据类型的一种方式。VSL结构可以有零个或多个成员,这些成员可以是任何VSL中的已知类型。VSL结构和C的结构非常相似。<br><br>结构声明实例:</p>
<pre>struct Car<br>{<br> Entity3D entity;<br> Vector direction;<br> float gaz;<br>};
<p></p>
</pre>
<li>VSL可以操作C/C++类型。在VSL中使用类(class)之前,你必须绑定它。</li>
<p>VSL来源于很多Virtools SDK中的约束类(bound classes)。大多数情况下,类的名称从Virtools SDK到VSL会发生改变。对于Virtools SDK用户来说,CK3dEntity是熟知的一个类,但到了VSL它的名字就变为"Entity3D"了。</p>
<h3>
<a name="TOC-3"></a>变量</h3>
<p>变量是一个存储单元,且带有一个相关联的类型,可能是基本类型、VSL结构或C/C++类。变量总是包含一个和它的类型相兼容的所赋的值。变量值通过赋值或前缀式或后缀式 ++ / --运算符来进行改变。</p>
<p>这里有些在VSL中进行变量声明的实例:</p>
<pre><span>// Declare an integer variable named "i"</span>
int i;<br><span>// Declare an array of 123 float named "table"</span>
float table[123];<br><span>// Declare a Vector variable named "speed", initialized with values 1.0, 2.0 and 3.0</span>
Vector speed(1.0,2.0,3.0);<br><span>// Declare a variable referencing an Entity3D</span>
Entity3D bird;

<h3>
<a name="TOC-4"></a>变量范围</h3>
<p>VSL里变量名仅能在程序的特定区域中使用。这个区域叫做变量名的适用范围。适用范围觉得累变量名(指非静态或非共享变量)的生命周期。适用范围也决定了在调用类的构造器或析构器时变量名的可见性,及什么时候进行局部变量的初始化。</p>
<pre>void foo(int a) <span>// start of the function foo scope</span>
{
if (a) <span>// start of if scope</span>
{

} <span>// end of if scope</span>
} <span>// end of the function foo scope</span>

<p>让我们通过一个简单的实例来考察一下变量的生命周期:</p>
<pre>float angle; <span>// Declaring a global variable</span>

void foo()
{
angle = 0.01; <span>// ok</span>
}

void foo2(int a)
{
angle = a*180/P; <span>// error, P is not yet declared</span>
float P = 3.14159;

if (a) <span>// ok</span>
{
float angle2 = 360-angle; <span>// ok</span>
}
bc.OutputToConsole(angle2); <span>// it doesn't exist outside of the scope of the enclosing braces {...}<br></span>
}

<p>当你在一个函数外声明了一个变量时,它会以全局变量方式被调用,因为在当前VSL脚本的各个地方都是有用的。</p>
<h3>
<a name="TOC-5"></a>静态与共享全局变量</h3>
<p>我们的<strong>全局</strong>变量可以是共享式的或静态的。</p>
</pre></pre></pre>
<ul>
<li>静态全局变量具有在某个脚本的两次执行中保持它的值的特性。</li>
<li>共享全局变量具有保持它的值静态不变的能力,但所有对该变量进行了声明的脚本间都可以共享该变量。</li>
</ul>
<p><br><strong>怎样声明静态或共享全局变量</strong></p>
<pre>shared int a; <span>// a is a shared global variable</span>
static float b; <span>// b is a static global variable</span>

void main()
{
shared int i;<span>// i is not a shared variable (shared keyword is ignored)</span>
static float j;<span>// j is not a static variable (static keyword is ignored)</span>
<span>// ...</span>
}

<p>在声明静态或共享全局变量时,你无法初始化或调用那种没有默认<strong>构造器</strong>环境的变量。</p>
<pre>shared int a = 0; <span>// error</span>
static Vector v(1.0,2.0,3.0); <span>// error</span>

void main()
{
static int b = 0; <span>// Not an error because static keyword is ignored</span>
shared Vector w(-1,0,0); <span>// Not an error because shared keyword is ignored</span>
<span>// ...</span>
}

<p><strong>静态全局变量</strong></p>
<p>实例:</p>
<pre><span>// ...</span>
static int a;

void main()
{
if (iIn1) { <span>// iIn1 is a boolean global variable</span>
a = 0;
} else {
++a;
}
}

<p>如果在我们第一次执行脚本的时候,iIn1为true,a等于0。<br>然后,为了下一次脚本执行时a的值增加,我们将iIn1设为false,所以到时候第二次执行会将a设为1,而第三次则会将a设为2,等等。<strong><br></strong></p>
<p><strong>共享全局变量</strong></p>
<p>实例:</p>
<pre><span>// First script</span>
shared Vector pos;

void main()
{
pos.Set(0,1,0.5);
}

<pre><span>// Second script</span>
shared Vector pos;<span> // the second script also declares pos as a shared Vector</span>

void main()
{
Vector test(0,1,0.5)
if (pos == test) {
<span>// ...</span>
}
}

<p>如果我们在第二个脚本执行了第一个脚本,pos的值是 {0,1,0.5} ,所以在第二个脚本中条件 pos == test 为true。</p>
<h3>
<a name="TOC-6"></a>变量名</h3>
<p>在VSL中,一些特定的名字是不能作为变量名使用的,如类/结构名及以下保留字:</p>
</pre></pre></pre></pre></pre>
<table style="width: 276px;" border="0" cellpadding="10"><tbody><tr valign="top">
<td width="8%">main<br>int<br>short<br>float<br>char<br>while<br>do<br>bool</td>
<td width="12%">if<br>for<br>then<br>else<br>true<br>false<br>TRUE<br>FALSE</td>
<td width="14%" valign="top">NULL<br>null<br>struct<br>class<br>enum<br>extern<br>shared<br>static<br>
</td>
<td width="66%" valign="top">
<p>switch<br>case<br>default<br>break<br>continue<br>return</p>
</td>
</tr></tbody></table>
<p>编译器按以下顺序搜索名字,当找到了名字时就停止:</p>
<blockquote>
<li>从当前范围到全局范围搜索</li>
<li>搜索看名字是否为枚举值</li>
<li>搜索看名字是否为定义的常量</li>
</blockquote>
<pre>void foo(int a)<br>{<br> bc.OutputToConsole(pi); <span>// print 3.14159 (pi is a constant in VSL)</span>

float pi = 1.0;

if (a)
{
float pi = 0.5;
bc.OutputToConsole(pi); <span>// print 0.5</span>
}

bc.OutputToConsole(pi); <span>// print 1.0</span>
}

<pre>enum Const<br>{<br> pi,<br> epsilon,<br> maxint,<br>};<br><br>
void foo(int a)
{
bc.OutputToConsole(pi); <span>// print 0</span>

float pi = 1.0;

if (a)
{
float pi = 0.5;
bc.OutputToConsole(pi); <span>// print 0.5</span>
}

bc.OutputToConsole(pi); <span>// print 1.0</span>
}
</pre></pre>
分享到:
评论

相关推荐

    Virtools例子----走迷宫(附带max模型、Virtools源文件)

    在压缩包文件"Virtools-走迷宫"中,可能包含了以下内容: 1. Virtools工程文件:这是Virtools项目的主要文件,包含了场景布局、行为脚本、资源引用等所有信息。用户可以使用Virtools软件打开此文件,查看和修改项目...

    Virtools增强现实专用BB-ARToolkit BB

    增强现实技术通过将虚拟信息与现实世界融合,为用户创造了一个全新的交互体验,而Virtools AR Toolkit BB则简化了这一过程,使得开发者能够更高效地创建此类应用。 首先,让我们深入了解Virtools。Virtools是一款...

    Virtools的VSL和SDK编程编码规则

    Virtools 是一款强大的交互式3D应用开发工具,它的VSL(Virtools Script Language)是内置的脚本语言,而SDK(Software Development Kit)则提供了更底层的编程接口。为了确保代码的质量、可读性和可维护性,遵循...

    virtools学习资料

    ### Virtools学习资料:VSL脚本语言入门与实践 #### 一、VSL脚本语言简介 Virtools是一款强大的3D应用开发平台,广泛应用于游戏开发、虚拟现实、建筑可视化等多个领域。Virtools提供了丰富的功能和工具集,其中VSL...

    virtools基本教材

    - **脚本语言**:Virtools脚本语言(VSL),用于编写自定义行为。 4. **参数** - **概述**:用于控制对象行为的数据值。 - **参数操作**:通过运算符改变参数的值,实现动态调整对象的状态。 5. **属性** - **...

    VirTools教程

    VSL是一种专为Virtools设计的脚本语言,允许程序员深入控制交互逻辑。 4. **渲染引擎** 渲染引擎负责将3D场景转化为可视图像,支持实时预览和最终输出。开发者可以通过SDK定制渲染引擎,以满足特定需求。 5. **...

    Virtools电子教程 全中文

    本教程全面覆盖了Virtools的基础到高级功能,以全中文的形式呈现,旨在帮助用户克服语言障碍,更好地理解和掌握这款软件的使用。 在本教程中,你将学习到以下关键知识点: 1. **Virtools界面与工作流程**:了解...

    Virtools 中文精华教程PDF

    此外,教程还会涵盖动画系统、脚本语言(LVB)的使用,以及如何与外部程序(如Unity、C++)进行集成。动画系统允许用户制作角色和物体的动态效果,而LVB(Virtools Behavior Language)则为那些希望更深入编程的用户...

    Virtools播放器去水印Lib-5.0.0.8版

    通过SDK,你可以访问到Virtools的各种内部函数和对象,包括与播放器界面和渲染引擎交互的部分。 在实际操作中,你可能需要将CKKernelInit.lib链接到你的项目中,然后调用相应的API来初始化和控制播放器的行为。这...

    Virtools中文教程pdf

    尽管Virtools强调无代码开发,但其内置的LScript语言提供了更高级的功能,对于复杂逻辑或自定义功能的实现必不可少。 六、交互设计 1. 交互对象:设置对象为交互式,定义其响应何种类型的用户交互。 2. 事件触发:...

    virtools我的最爱

    它提供了多种方式进行交互式体验的创建,包括VSL(Virtools脚本语言)、脚本流程图以及SDK(软件开发工具包)。 VSL,全称为Virtools Script Language,是一种强大的脚本语言,允许开发者深入到Virtools SDK的底层...

    Virtools漫游脚本程序

    Virtools漫游脚本程序是一种基于Virtools软件的高级编程技术,主要用于创建虚拟现实(VR)环境中的交互式漫游体验。Virtools是一款强大的3D创作工具,它为设计师和开发者提供了一个直观的界面,用于构建复杂的3D场景、...

    Virtools入门教程

    【Virtools入门教程】 Virtools是一款强大的3D交互式虚拟现实编辑软件,它不是传统的3D引擎,而是一个集成了多种资源(如3D模型、2D图形和音效)的整合工具。这款软件的核心特点是其丰富的“互动行为模组”...

    VT资料\virtools教程\Virtools教程

    【Virtools教程】是针对虚拟现实开发平台Virtools的一份详细教学资料,旨在帮助初学者理解和掌握如何在Virtools中创建3D互动场景。Virtools是一个强大的工具,它允许用户无需编程知识就能构建复杂的交互式应用程序,...

    3DMax导出到Virtools5.0插件(max2009-2011)

    《3DMax与Virtools交互:3DMax导出到Virtools5.0插件的详细解析》 在三维制作领域,3DMax是一款广泛使用的专业3D建模、动画和渲染软件,而Virtools则是一款强大的交互式3D应用程序开发平台。两者结合,能够实现从3D...

    virtools入门教程

    ### Virtools入门教程详解 #### 一、Virtools概述与特色 Virtools是一款革命性的实时3D环境虚拟现实编辑软件,旨在将常见的档案格式(包括3D模型、2D图像和音频)无缝集成,用于创建各种3D产品,如网络应用、电脑...

    Virtools中文教程+SDK初探

    3. **脚本接口**:使用Python或C#与Virtools交互,自动化工作流程或实现更复杂的逻辑。 4. **网络通信**:通过SDK实现多用户交互,支持多人在线游戏或协同设计环境。 5. **数据交换**:与外部程序(如数据库、服务器...

Global site tag (gtag.js) - Google Analytics