zoukankan      html  css  js  c++  java
  • 通过实例学习Virtools脚本语言VSL 将物体排列于圆周上

    该系统演示了怎样用VSL来操纵三维实体及复制物体。

    1. 开始一个新作品并在3D Layout工作区添加一些随机的物体(或创建一些三维帧 - 3D Frame)。创建一个组(Group)并将所有物体添加到该组中。

      注意:如果你用的是3D Frame,请确保你在3D Layout - Rendering preferences 面板中的播放器模式(Player Mode)处勾选了"Show All Frames"框,以便在播放模式下能看到那些3D Frame。
    2. 在层级(Level)下创建一个脚本并添加一个Run VSL BB。在VSL Script Manager中,添加两个pIn参数:第一个叫做"objGroup"且为Group类型,第二个叫做"radius"且为float类型。
    3. 讲以下代码复制到代码视图,并编译VSL脚本:
      void main()
      {
      // Get number of objects
      int nbObject = objGroup.GetObjectCount();

      // Calculate angle betwen each objets
      float angle = 2*pi/nbObject;

      Vector pos(0,0,0);

      // Place each object on the circle
      for (int i = 0; i < nbObject; ++i)
      {
      // We get the nth object and cast it in Entity3D
      Entity3D obj = Entity3D.Cast(objGroup.GetObject(i));

      // If cast failed obj is null so we skip process...
      if (!obj)
      continue;

      // Compute object position
      pos.x = radius*sin(i*angle);
      pos.z = radius*cos(i*angle);

      // Place object
      obj.SetPosition(pos, null, true);
      }
      }
    4. 在Schematic工作区,按如下方式编辑你的Run VSL BB的参数:
      • objGroup = Group1 (或者是你自己给那个组 - group所选的名字)
      • radius = 10
    5. 运行该VSL脚本。你就会看到3D Layout工作区中所有物体都均匀分布在圆周上。

      可以对这个脚本进行一个有趣的修改:使用单个物体,在运行时将它复制几遍,即不是在起始时就有几个物体。

    6. 在VSL Script Manager工作区中,移除那个代表组的pIn参数并再添加两个pIn:一个叫做"originalObject"且类型为Entity3D,另一个叫做"nbOject"且类型为int。然后按以下内容修改你的代码:
      void main()
      {
      // Calculate angle betwen each objets
      float angle = 2*pi/nbObject;

      Vector Pos(0,0,0);

      // Place each object on the circle
      for (int i = 0; i < nbObject; ++i)
      {
      // We copy a nth object and cast it in Entity3D
      Entity3D obj = Entity3D.Cast(bc.Copy(originalObject, true, true));

      //If cast failed obj is null so we skip process...
      if (!obj)
      continue;

      // Compute object position
      pos.x = radius*sin(i*angle);
      pos.z = radius*cos(i*angle);

      // Place object
      obj.SetPosition(pos, null, true);
      }
      }
    7. 编辑你的pIn参数,编译VSL脚本然后运行它。

      你会看到你的原始对象按指定的次数被复制,并且所有对象被均匀分布在圆周上。注意:那些复制出来的物体是以动态方式创建的(由bc对象 的"Copy"方法中的第二个参数控制)。所以如果你按了Reset键,你所有动态创建的物体会被销毁。
    本文来源:http://www.cnblogs.com/x3d/,转载请注明。
  • 相关阅读:
    国内固定电话正则验证:'tel': [/0d{2,3}-d{7,8}(|([-u8f6c]{1}d{1,5}))$/, "请填写有效的电话号码"],
    戴尔3542安装ubuntu时出现:failed to lead ldlinux.c32
    解决:IntelliJ IDEA 编译错误,提示 Compilation failed: internal java compiler error
    超详细~Windows下PyCharm配置Anaconda环境教程!!
    python数据可视化--matplotlib用户手册入门:pyplot画图
    python数据分析——numpy创建多维数组的方式
    python timeit 模块使用,解决%timeit无法使用
    MySQL导入导出数据的中文乱码问题
    如果启动mysql时候,报第一行错误,基本是这个原因没跑了
    mysql安装后服务启动不了(总结)
  • 原文地址:https://www.cnblogs.com/x3d/p/2661395.html
Copyright © 2011-2022 走看看