gpt4 book ai didi

SceneKit:理解SCNNode的pivot属性

转载 作者:行者123 更新时间:2023-12-02 11:24:32 25 4
gpt4 key购买 nike

目标是增加 SCNBox 的长度,使其仅在正 z 方向增长。

This answer建议使用 pivot属性(property)。

但是,pivot 的文档属性在 SCNNode 页面上是稀疏的,在 SCNBox 页面上没有任何内容。

谁能解释一下pivot属性(property)工作?

最佳答案

更改节点的 pivot在概念上与在此节点与其父节点之间插入中间节点相同。这在不同情况下很有用。一个示例是当节点几何的中心不在您期望的位置时。

例如,如果您有一个 SCNBox ,它的边界框是

  • 分钟:(-0.5 * width, -0.5 * height, -0.5 * length)
  • 最大值:(+0.5 * width, +0.5 * height, +0.5 * length)
  • 中心:(0.0, 0.0, 0.0)

  • 如果您想要 lengthSCNBox只增加正 Z 轴,那么你想要的是
  • 分钟:(-0.5 * width, -0.5 * height, 0.0)
  • 最大值:(+0.5 * width, +0.5 * height, length)
  • 中心:(0.0, 0.0, +0.5 * length)

  • 几何的边界框永远不会改变,但有一些方法可以排列节点并改变它们的边界框。

    方案一:中间节点

    处理转换时的一种常见解决方案是使用中间节点来更好地了解如何应用转换。

    在您的情况下,您需要更改节点层次结构
    - parentNode
    | - node
    | * geometry
    | * transform = SCNMatrix4MakeScale(...)


    - parentNode
    | - intermediateNode
    | * transform = SCNMatrix4MakeScale(...)
    | | - node
    | | * geometry
    | | * transform = SCNMatrix4MakeTranslation(0, 0, +0.5 * length)

    有了这个新的层次结构, node 的边界框的中心还在 (0.0, 0.0, 0.0) ,而是 intermediateNode 的边界框的中心是 (0.0, 0.0, +0.5 * length) .

    通过缩放 intermediateNode而不是 node你会得到想要的结果。

    解决方案 2:枢轴

    事实证明这正是 pivot属性:
    node.pivot = SCNMatrix4MakeTranslation(0, 0, -0.5 * length);

    一旦你在头脑中弄清楚了中间节点的变换,只需设置它的 pivot属性(property)。

    您可以找到有关 pivot 的更多信息这里的属性(property): https://developer.apple.com/reference/scenekit/scnnode/1408044-pivot

    这与 Core Animation 的 anchorPoint 非常相似。属性(property)在 CALayer ,除了在 Core Animation 中, anchor 被指定为相对于图层的边界框(从 01,作为图层宽度和高度的百分比),而在 SceneKit 中它是绝对的。

    关于SceneKit:理解SCNNode的pivot属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42568420/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com