tuo-scene插件的概念

tuo-scene插件的定义从api的层面上看:

插件负责直接调用和响应来自TuoScene等核心组件的消息或api

tuo-scene的插件从功能上看主要负责管理两个东西:

  1. 管理控制效果
  2. 管理渲染效果

总体上来说,tuo-scene的插件是为了实现某种控制或(和)渲染效果,而调用TuoScene等核心组件的api,监听TuoScene等核心组件的各类事件。

这个定义同时也限定了tuo-scene插件的边界条件,除了实现控制效果和渲染效果以外的事情,不应该由插件来处理。例如给场景中的对象修改状态,给3D对象添加附属辅助对象等任务,不应交由插件处理。插件只负责实现场景中对象的渲染或(和)直接控制效果用的。

对象间的控制效果尽可能由对象自己实现,更复杂的控制效果应该由引用tuo-scene的应用自身来实现,或者在该应用中专门实现定制化的插件。对于tuo-scene本身,我们应该避免公用插件的应用场景过渡垂直化的情况。

tuo-scene的控制管理概念

控制概念的定义

在一个场景图的应用场景里,用户的很多操作,本质上,是手动或自动的控制场景图中的对象。例如,在3D浏览过程中对视图进行旋转,放缩和平移,本质上是对与视图所绑定的摄像头做控制。在场景图中播放一段动画,本质上是运行一个自动程序,并由其对相关的3D对象进行控制。因此,“控制”是tuo-scene项目最核心的管理要素之一。本文将定义几条规则应用于所有需要“控制”的场景。

控制管理的问题

控制管理的核心问题是资源的占用的问题。一个3D对象同时被手动控制效果和多个自动控制效果所完全控制则很可能产生不可预测的结果,绝大多数情况下,这是不允许的。同样一个手动操作产生多种控制效果,在绝大多数的情况下也是不运行的(例如滑动屏幕时,同时控制摄像头移动和场景中其他对象的平移)。这就涉及到了控制资源的管理问题。

控制规则

  1. 所有手动控制效果开始启动时,需要向TuoView和被控制对象发布控制启动消息
  2. 所有自动控制效果在开始启动时,需要向被控制的对象发布控制启动消息
  3. 所有运行中的自动控制效果需要监听被控制对象的控制启动消息,一旦监听到随即作出反应(例如,停止自己的控制)。
  4. 所有待启动的手动控制效果需要监听TuoView对象发布的控制启动消息,一但监听到,则停止监听,直到其再次收到TuoView发布的控制结束消息,才恢复到待启动状态。
  5. 所有手动控制效果在结束时,需要向TuoView和被控制对象发布控制结束消息
  6. 所有自动控制效果在结束时,需要向被控制对象发布控制结束消息

控制启动消息

{
type: 'startControl',
id: String (uuidv4), //一个uuidv4字符串
}

控制结束消息

{
type: 'endControl',
id: String(uuidv4), //一个uuidv4字符串
reason: 'interrupt' || 'end' //表示结束原因,'interrupt'表示被其他控制效果所打断,'end'表示自然结束
}

tuo-scene项目简介

tuo-scene项目是本公司推出的一个开源项目,主要用来做3D和2D的场景管理。此项目起源于4年前的tuo-three-renderer项目。经过了tuo-react-three, tuo-three和 tuo-three2,最终演变成目前的tuo-scene项目。

tuo-scene具备以下基本特点:

  1. 场景的状态具备高度的可配置性和易配置性
  2. 在结构上具备一个场景对应多个视图的特点
  3. 具备一个可配置性的插件系统
  4. 视图具备多图层的结构
  5. 3D和2D对象混合渲染和管理
  6. api灵活,可以很好的应用在react等架构中

tuo-scene项目里程记录

  1. 2020年9月16日 tuo-scene项目启动
  2. 2020年9月18日 tuo-scene第一个示例helloworld完成
  3. 2020年9月23日 tuo-scene第二个示例single-scene-multiple-view完成,单场景多视图的架构设计开始体现出来
  4. 2020年9月23日 tuo-scene的cubic插件添加完成,添加了第三个示例cubic。多控制器竞争(此处是手动控制镜头的运动与自动控制镜头的移动)的架构设计开始体现出来。
  5. 2020年9月25日 tuo-scene添加了TuoObject2D的应用。tuo-scene开始很好的支持2d与3d混合渲染
  6. 2020年10月5日 tuo-scene添加了coordTransform插件。
  7. 2020年10月6日 tuo-scene添加了refTransform插件和viewSpecifyMap的支持。
  8. 2020年12月5日 tuo-scene添加了orbit的摄像头控件和示例。
  9. 2021年2月20日 tuo-scene添加镜头切换(透视和正交)功能和示例。