跳到主要内容

渲染路径

渲染路径是「在某一种渲染模式下绘制某一种逻辑数据类型」的运行时实现。 数据被添加进来时视口会选定一条渲染路径,之后该路径返回的绑定 就开始从视口接收视图与显示状态的更新。

例子包括:

  • 为堆栈影像做的 CPU 影像切面渲染。
  • 为体数据做的 CPU 体数据切面渲染。
  • VTK 影像 mapper 渲染。
  • VTK 体数据切面渲染。
  • DOM video 元素渲染。
  • Canvas 上的 ECG 波形渲染。

选择

渲染路径的选择从这几项输入开始:请求的视口类型、逻辑数据、数据集形态、 请求的方位,以及渲染配置。一个视口专属的决策服务选出有效路径, 随后该视口族的渲染路径解析器返回目录中第一条与已加载数据及内部决策相匹配的路径。 被选中的路径还可以把根视口的渲染上下文收窄为它自己需要的运行时上下文。

对平面视口而言,堆栈类的 imageId 会选中影像路径,而基于体数据的数据和 重建方位会选中体数据切面路径。CPU / GPU 的选择取决于渲染配置、阈值和运行时支持情况。 源数据与叠加数据的角色参与渲染路径的判定。

投射

渲染路径并不持有视口导航的真值。它们通过 applyViewState() 接收视口的 viewState, 并使用视口解析出的数据来施加特定渲染器的指令。

平面渲染路径把解析后的平面视图投射为:

  • 用于 VTK 影像与体数据切面渲染的 VTK 相机字段。
  • 用于 CPU 影像与 CPU 体数据渲染的 CPU 变换信息。
  • 一个共享的活动源 ICamera,供叠加数据用来对齐和采样。
  • 在兼容的标签图分割渲染中使用的切面 / 影像叠加指令。

视频和 ECG 渲染路径则从语义状态、元素或画布尺寸、以及数据度量信息中解析出一套 画布映射关系。该映射提供画布/世界坐标变换,以及 DOM 或画布的绘制偏移。

源数据与叠加数据的归属

源绑定决定了视口当前的活动解析视图。叠加绑定会收到同一份 viewState, 但它们不会取代活动的源视图。在平面渲染中,只有源绑定会写入 ctx.view.activeSourceICamera;叠加数据只读取它,用于把采样或 actor 对齐到源数据。

分割切面渲染也是这么工作的。源体数据切面定义了活动视图, 标签图表示形式作为叠加绑定挂载,并在启用 useSliceRendering 时通过切面路径渲染。 它跟随源数据的导航,但不会自己成为源视图。

新增渲染路径

新增一条渲染路径时:

  • 只匹配这条路径确实能绘制的数据类型与内部渲染路径决策。
  • 把路径定义加入所属视口族的渲染路径目录,让生产环境的装配关系保持显式。
  • 把持久化的导航状态留在视口上。
  • applyViewState() 实现为「从语义状态到运行时指令」的投射。
  • 外观相关的设置放进数据显示状态,而不是视图状态。
  • 通过 removeData() 返回清理逻辑,让运行时资源由创建它的那个绑定负责释放。