动画

Eyeshot的官方Demo中有一个功能是近期项目需要用到的,就是动画效果。其中主要运用到BlockReference类,该类下的两个方法MoveTo(Dictionary<string, Block> blocks)和Animate(int frameNumber)分别用来移动某个block中的实体和作为接口与视图ViewportLayout交互。

假如我导入了一个模型,该模型中包含多个Entity和Material,这里material不用加以管理,只需要处理entity。首先要写一个新的类继承类BlockReference,重写MoveTo方法和Animate方法,留出一个接口来接收block。例如可以这样写:

 class MyEntity : BlockReference
{
// 定义一个变量,表示在Y轴的位移量
private double yPos; public MyEntity(string blockName)
: base(, , , blockName, , , , ) { }
protected override void Animate(int frameNumber)
{
// 该处主要是编写运动轨迹,可根据需要进行数学运算表达出需要的运动轨迹
// 这里就只是单纯把帧数传递给位移量
yPos = frameNumber;
base.Animate(frameNumber);
}
public override void MoveTo(Dictionary<string, Block> blocks)
{
base.MoveTo(blocks);
// 用Translated方法来移动实体,参数分别是X,Y,Z轴的位移量
OpenGL.gl.Translated(, -yPos, );
}
}

即Animate函数和MoveTo函数不断地执行,进而达到移动模型的效果。 至于执行的频率则与参数frameNumber有关,如不使用StopAnimate()方法停止移动,就会一直运动下去,可达到官方demo中那种循环运动的效果。

如上,在自定义类MyEntity的构造函数中的参数,可按照自己的需要结合BlockReference类来定义,不过我理解的是,至少需要一个参数,因为继承了BlockReference类。这里只用到了blockName这一个参数,就是与外界的接口。在导入模型之后,将所有导入模型中的entity都添加到一个block中,并以该block的name为参数实例化类MyEntity,将该类添加到ViewportLayout的Entities列表中。如需执行动画,用方法viewportLayout1.StartAnimation()停止则用viewportLayout1.StopAnimation(),比如可以这样使用:

private void viewportLayout1_WorkCompleted(object sender, WorkCompletedEventArgs e)
{
if (e.WorkUnit is ReadFileAsynch)//导入文件
{
ReadFileAsynch rfa = (ReadFileAsynch)e.WorkUnit;
Entity[] entList = rfa.Entities; Block b = new Block();
for (int i = ; i < entList.Length; i++)
{
b.Entities.Add(entList[i]);
}
viewportLayout1.Blocks.Add("block1", b);
MyEntity me = new MyEntity("block1");
viewportLayout1.Entities.Add(me);
}
}

执行动画以及停止动画可在任意需要的地方添加,比如按钮点击 事件中。

当然,以上只是简单记录了基本使用方法,如果想要实现比较复杂的动画效果,不仅在Animate函数中需要详细计算以外,还可能用到timer来控制运行时间,或者其他手段。总之,知道了最基本的用法就可以根据需求不断扩充嘛。

Eyeshot Ultimate 学习笔记(4)的更多相关文章

  1. Eyeshot Ultimate 学习笔记(1)

    在Winform项目中用到3D技术,这是在做项目一段时间以来第一次,还是指定的3D控件Eyeshot Ultimate,这个控件名称用度娘搜索,竟然毫无结果,不知道是没有人用过还是觉得该控件过于简单, ...

  2. Eyeshot Ultimate 学习笔记(2)

    导入模型 一般情况下,我们自己搭建模型的功力还不够,大多都是在3Dmax中做好模型,导出成模型文件,然后再导入Eyeshot视图中.导入的代码包括: OpenFileDialog openFileDi ...

  3. Eyeshot Ultimate 学习笔记(3)

    实体角度和位置的控制 有时候导入的模型方向或者角度不太适合,就需要调节一下,这里我发现的一种方法是用到Transformation类,其实有很多类的运用都非常灵活,如果不是有官方示例,恐怕是很难发现的 ...

  4. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  5. VSTO 学习笔记(十三)谈谈VSTO项目的部署

    原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中, ...

  6. VSTO学习笔记(十五)Office 2013 初体验

    原文:VSTO学习笔记(十五)Office 2013 初体验 Office 2013 近期发布了首个面向消费者的预览版本,我也于第一时间进行了更新试用.从此开始VSTO系列全面转向Office 201 ...

  7. VSTO 学习笔记(十)Office 2010 Ribbon开发

    原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个R ...

  8. VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式

    原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...

  9. VSTO学习笔记(八)向 Word 2010 中写入表结构

    原文:VSTO学习笔记(八)向 Word 2010 中写入表结构 前几天公司在做CMMI 3级认证,需要提交一系列的Word文档,其中有一种文档要求添加公司几个系统的数据库中的表结构.我临时接到了这项 ...

随机推荐

  1. 在触屏设备中拖动 overflow 元素

    在 Android 和 iOS 等触屏设备中,如果网页中某元素设置 overflow: auto 或者 overflow:scroll,那么问题就来了.在 Android 3.0 之前以及 iPhon ...

  2. 聊聊LAA(LARGE ADDRESS AWARE)

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:聊聊LAA(LARGE ADDRESS AWARE).

  3. dublin core实例

    <?xml version="1.0"?> <metadata xmlns="http://example.org/myapp/" xmlns ...

  4. ios8 关于UIAlertController 代替UIActionsheet

    self.alertController=[UIAlertController alertControllerWithTitle:@"请选择\n\n\n\n\n\n\n\n\n\n\n\n\ ...

  5. Ubuntu Server 12.04 静态IP简洁配置

    PS:很长时间没使用Ubuntu了,刚才安装个Ubuntu Server 12.04做测试.Ubuntu的网络设置跟Redhat系是不一样的,配置IP时发现跟以前的Ubuntu桌面版本也有所不同,记录 ...

  6. [Javascript] Immute Object

    Three ways to make object immutable: 1. Use JSON.parse(JSON.stringify(obj)): this approach is little ...

  7. 给未来的你——李开复2011级大学新生演讲

    2011年09月26日08:30 来源:<中国青年报> <中国青年报>的读者朋友们: 你们肩负着中华的未来,你们身上正涌动着创新的血脉! 无论你在哪所学校,哪个城市,你都是与众 ...

  8. 常用工具之stunnel

    The stunnel program is designed to work as an SSL encryption wrapper between remote client and local ...

  9. 2016iweb峰会参会总结

    2016年8月27日去国家会议中心参加iweb峰会. 8点半开始签到入场,8点20分排队签到的人已经排到另一个门口,人超级多啊. 9点一如既往的由h5女神娜姐开场. 上午场 基本是各公司的大佬们介绍各 ...

  10. Linux启动遇到的问题

    双系统装的Ubuntu,在一次意外关机后无法进入图形界面,每次输入完密码进入桌面后又会退到密码输入界面.使用命令行df -hl查看发现根目录使用率达到100%.推测是因为意外关机导致的,但是找不到应该 ...