TiXL 节点算子详解Vec3Distance 计算两个三维点之间的距离【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3Vec3Distance 是 TiXLtooll3算子库Lib.numbers.vec3中用于计算两个三维向量即两个空间位置之间欧几里得距离的算子其官方文档描述为Computes the distance between two vectors (I.e., subtract two positions)。本指南以 Vec3Distance.md 为基础结合该算子对应的源码、序列化配置与库内真实引用完整讲解其输入输出、数学原理、图内接线方式与典型实战场景帮助你在实时动态图形项目中快速完成两点间距离的计算与驱动。算子功能与数学原理Vec3Distance 的本质是将两个Vector3输入做向量差相减后取模长distance |Input1 − Input2| √((x₁−x₂)² (y₁−y₂)² (z₁−z₂)²)文档特别用subtract two positions点明其惯用语义在 TiXL 的三维场景中Vector3经常被用作空间位置坐标因此该算子最常见的用途就是测量两个对象或两个点之间的距离而不是纯粹的抽象向量运算。它与同一命名空间下的 SubVec3向量相减和 Magnitude向量模长两个算子的组合在数学上完全等价——先SubVec3得到差向量、再Magnitude求长度但 Vec3Distance 把这两算子串联压缩成了一次底层调用。从源码实现看该算子的核心逻辑只有一行。在 Vec3Distance.cs 的更新回调中private void Update(EvaluationContext context) { Result.Value Vector3.Distance(Input1.GetValue(context), Input2.GetValue(context)); }Vector3.Distance是底层引擎提供的标准 3D 数学函数底层内部实现正是上述差向量取模的公式。相比在图中串联SubVec3与Magnitude两个节点直接使用本算子既能减少节点数量也让数据流图更直观地表达距离这一语义。输入输出参数以下参数表格完整继承自官方文档并补充了默认值与类型说明名称类型说明Input1Vector3第一个三维向量位置默认值(0, 0, 0)Input2Vector3第二个三维向量位置默认值(0, 0, 0)ResultSystem.Single输出结果Input1与Input2之间的欧几里得距离标量浮点数几点值得注意的细节输出是标量而非向量Result的类型为System.SingleC# 的 32 位单精度浮点数也就是说距离值可以直接接入其他算子的数值型输入例如作为透明度、缩放比例、颜色插值因子或音量参数的驱动源。输入默认值为原点在 Vec3Distance.t3 的序列化配置中两个输入的DefaultValue均为X: 0.0, Y: 0.0, Z: 0.0。若某一路输入未接线将按原点(0,0,0)参与计算此时输出即另一输入向量自身的模长等价于 Magnitude 的行为。结果恒为非负数距离是差向量的模长永远不会为负当两个输入向量完全相等时输出为0。源码实现与求值机制从 Vec3Distance.cs 的完整源码可以观察到 TiXL 算子框架的标准写法这也是理解该算子求值时序的关键[Guid(4af1080c-3133-4070-a440-4cf2f4cc10a1)] internal sealed class Vec3Distance : InstanceVec3Distance { [Output(Guid 14D4FD70-153B-4AD2-B068-71A29427FBF4)] public readonly Slotfloat Result new(); public Vec3Distance() { Result.UpdateAction Update; } [Input(Guid eecb6054-ecb8-4b22-a685-6740ed1cfe5c)] public readonly InputSlotVector3 Input1 new(); [Input(Guid c4094f11-d93d-4497-b1ce-1faa8bc1d1b0)] public readonly InputSlotVector3 Input2 new(); }其中几个关键机制说明如下Guid 标识算子类、每个输入槽与输出槽都通过Guid属性标注唯一标识。这些标识与 Vec3Distance.t3 中的Id字段一一对应是算子实例在项目文件中持久化、以及被其他符号引用时的寻址依据。延迟求值Lazy EvaluationResult.UpdateAction Update将Update方法注册为输出槽的更新动作。TiXL 采用基于脏标记DirtyFlag的求值体系只有当上游输入发生变化时输出槽才会被重新求值避免每一帧做无谓的重算。输入槽的默认值语义InputSlotT见 InputSlot.cs在求值时遵循未接线则使用默认值、已接线则使用上游连接值的规则这与上文提到的.t3默认值(0,0,0)相互印证。求值上下文GetValue(context)中的EvaluationContext携带当前帧的求值状态如时间、随机种子等确保在动画循环中每次求值都能拿到正确的当前输入值。在节点图中的接线与配置Vec3Distance 的图内布局记录在 Vec3Distance.t3ui 中默认两个输入槽分别位于符号的左上侧(-200, 0)与(-200, 45)输出槽位于右侧(0, 100)。这个布局信息仅供编辑器渲染使用不影响算子的运行时行为。在实际使用中接线方式非常直观将两个表示空间位置或任意向量的算子输出分别连接到Input1与Input2从Result输出引出标量值驱动下游需要距离数值的输入两路输入都可以来自不同的数据源例如一个来自对象变换Transform节点的位置输出另一个来自拾取PickVector3或常数 Vector3 节点。若希望验证接线正确性可以观察输出值是否符合预期公式当 Input1 为(1, 0, 0)、Input2 为(0, 0, 0)时Result 应为1.0当 Input1 为(1, 1, 1)、Input2 为原点时Result 应为√3 ≈ 1.732。与同族向/量算子的对比与协作Vec3Distance 所属的Lib.numbers.vec3命名空间算子目录见 .help/docs/operators/lib/numbers/vec3/README.md提供了完整的三维向量处理家族理解它们之间的差异有助于选型算子输出类型与 Vec3Distance 的关系SubVec3Vector3只做差向量保留方向信息输出仍是向量MagnitudeSingle对单个向量求模长忽略方向DotVec3Single点积输出受两向量夹角影响不具距离语义NormalizeVector3Vector3只保留方向、长度为 1Vec3DistanceSingle一步完成差向量 模长的组合语义需要同时获得距离与方向向量时可搭配使用SubVec3输出差向量用于方向与Vec3Distance输出距离用于标量两者并行计算互不干扰。若要判断两个点是否接近也可以先算距离再与 HasVec3Changed 族中的阈值判断思路结合使用。库内真实引用案例阴影平面Vec3Distance 并非孤立的演示算子它在官方算子库中已有实际使用。在 ShadowPlane.t3Lib.render.basic下的阴影平面符号内部通过SymbolId: 4af1080c-3133-4070-a440-4cf2f4cc10a1正是 Vec3Distance 的 Guid引用了该算子实例作为符号内部计算链路的组成部分{ Id: 442f9150-9b6f-4d00-a8d0-68ba6794b0fc/*Vec3Distance*/, SymbolId: 4af1080c-3133-4070-a440-4cf2f4cc10a1, InputValues: [], Outputs: [] }由此可见Vec3Distance 既可以直接拖入你自己的节点图也可以作为复合符号Sub-Symbol的内部子节点被复用其计算链路经由输出槽继续向后传播。这也是浏览Operators/Lib/Symbols/下大量.t3文件时理解算子组装方式的通用方法——SymbolId指向算子定义InputValues覆盖局部输入值Outputs建立子节点输出与父符号输出的映射。典型应用场景与注意事项结合实时动态图形的工作流Vec3Distance 常见于以下场景距离驱动的参数联动让粒子、文字或图层随其与相机/中心点的距离变化而改变透明度、缩放或颜色——将两位置接入本算子把Result接到对应的参数输入即可。碰撞与邻近检测在交互式演出中判断对象是否进入某个范围如舞者与舞台装置的距离输出值供阈值判断或逻辑分支使用。音频/视觉同步将三维空间中的运动幅度如移动端到手部的距离映射为标量信号进一步驱动音频包络或视觉强度。使用时注意以下几点输入均可动画化TiXL 的输入槽支持通过动画曲线驱动因此距离值可以随时间或数据平滑变化更新仅在输入脏标记触发时重算动画过程中的持续求值开销很小。输出精度System.Single为单精度浮点在超大坐标尺度下如超过 10⁷ 单位的场景可能产生精度损失常规舞台尺度数千单位内无需担心。等价替换若你更关注差向量本身比如要同时获得方向请改用 SubVec3仅求单向量长度则用 Magnitude只有当语义明确是两点距离时Vec3Distance 才是最优选择。小结Vec3Distance 用最简洁的接口两个 Vector3 输入、一个 Single 输出封装了三维空间中最常用的几何度量——两点距离。本文从官方文档出发结合 Vec3Distance.cs 的源码实现、Vec3Distance.t3 的默认配置以及 ShadowPlane.t3 的真实引用完整覆盖了它的原理、接线、选型与实战位置。当你需要把距离变成驱动画面的标量信号时这个算子就是最直接的入口。【免费下载链接】t3TiXL is an open source software to create realtime motion graphics.项目地址: https://gitcode.com/GitHub_Trending/t3/t3创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考