使用 Level of Detail 节点¶
备注
Level of Detail 节点不起作用,并计划在即将发布的版本中移除。但如果您需要此类功能,请联系 Rightware 支持团队并提交功能请求告知我们。请参阅 提交支持请求。
使用 Level of Detail 节点可用于根据 Level of Detail 节点的查看距离,显示相同对象或不同对象的不同外观。
Level of Detail 节点的每个子节点在选择并显示该外观时设置一个外观和一个约束。该约束可以是:
预览相机的最小距离。 您可以通过设置 Minimum Distance 属性的值来设置约束。较低的值会在预览相机更接近对象时选择子节点。较高的值会在预览相机更远离对象时选择子节点。Kanzi 显示的子节点的距离值是与 Level of Detail 节点到预览相机的距离相比下一个最大的。
屏幕的最小覆盖率。 您通过设置 Minimum Area 属性的值来设置约束。屏幕的覆盖率在范围 [0…10] 内测量,其中 0 表示对象完全不覆盖屏幕,10 表示对象完全覆盖屏幕。Kanzi 显示的子节点,其区域值是与 Level of Detail 节点的边界框投影到屏幕上的面积相比的下一个最大值。
请注意,Level of Detail 节点仅影响渲染,这就是为什么您不能在布局中使用它们的原因。Level of Detail 节点的大小是其最大子节点的大小,即使该子节点在当前 Level of Detail 节点不可见。
创建一个 Level of Detail 节点¶
要创建一个 Level of Detail 节点:
在 Node Tree 中,按 Alt 并右键单击 您要创建 Level of Detail 节点的 3D 节点,并选择 Level of Detail。
例如,在 Scene 节点中创建一个 Level of Detail 节点。
在 Properties 中,将 Type 属性设置为以下任一项:
Distance 创建一个 Level of Detail 节点,该节点根据 Level of Detail 节点与预览相机的距离显示其子节点。
Perspective 用于创建一个细节层次,该层次显示其子节点的区域值相对于 Level of Detail 节点的边界框投影到屏幕上的区域的下一个最大值。
例如,将 Type 设置为 Distance。
在 Node Tree 中,向 Level of Detail 节点添加子节点。
例如,添加一个 Sphere、一个 Box 和一个 Plane 节点。
对于您添加到 Level of Detail 节点的每个项目,基于您选择的 Level of Detail 节点的类型,Kanzi Studio 会添加 Minimum Distance 或 Minimum Area 属性。
选择您添加到 Level of Detail 节点的每个节点,并在 Properties 中,根据您选择的 Level of Detail 节点,设置 Minimum Distance 或 Minimum Area 属性值,以定义 Level of Detail 节点何时显示每个项目。
例如,如果您将 Type 设置为 Distance,在 Node Tree 中选择:
Sphere 并将其 Minimum Distance 属性设置为 0。
Box 并将其 Minimum Distance 属性设置为 10。
Plane 并将其 Minimum Distance 属性设置为 20。
当您沿 z 轴移动 Level of Detail 节点或预览摄像机时,Kanzi 显示的子节点的距离值是与 Level of Detail 节点到预览摄像机的距离相比下一个最大的。
在 API 中使用 Level of Detail 节点¶
要创建具有三个细节层次的距离 Level of Detail 节点:
// Create a level of detail selector node named LOD selector.
LevelOfDetail3DSharedPtr lodSelector = LevelOfDetail3D::create(domain, "LOD selector");
// Add three levels of detail, one child for each level.
lodSelector->addChild(lodHigh);
lodSelector->addChild(lodMedium);
lodSelector->addChild(lodLow);
// Set the level of detail selector node to show its child objects based on the
// level of detail selector node's distance from the preview camera.
lodSelector->setType(LevelOfDetail3D::LodTypeDistance);
// Use low level of distance child (lodLow) when the preview camera distance is
// at least 10.0f.
LevelOfDetail3D::setMinimumDistance(*lodLow, 10.0f);
// Use medium level of distance child (lodMedium) when the preview camera distance
// is at least 5.0f, but less than 10.0f.
LevelOfDetail3D::setMinimumDistance(*lodMedium, 5.0f);
// Use high level of distance child (lodHigh) when preview camera distance is
// less than 5.0f.
LevelOfDetail3D::setMinimumDistance(*lodHigh, 0.0f);
有关详细信息,请参阅 LevelOfDetail3D 类。
Level of Detail 属性类型和消息¶
有关 Level of Detail 节点的可用属性类型和消息的列表,请参阅 Level of Detail。