gpt4 book ai didi

WPF 3D - 使用嵌套的 Model3DGroup 变换在 3D 场景中定位 Visual3D 元素?

转载 作者:行者123 更新时间:2023-12-04 15:49:00 24 4
gpt4 key购买 nike

我有一个 3D 场景,其中我的 3D 模型正在从 XAML 文件的代码中加载。

每个模型都由嵌套的 Model3DGroups 树组成,每个 Model3DGroups 都应用了各种变换来定位和定向树中模型的下一个子组件。然后将该模型用作 ModelVisual3D 的内容,以便将其显示在屏幕上。

我想将子 ModelVisual3D 附加到“父”ModelVisual3D。这个子 ModelVisual3D 需要使用父 ModelVisual3D.Content 的所有嵌套转换来在虚拟空间中正确定位和定向。例如,第一个 ModelVisual3D 是一个机器人 ARM ,它有各种可移动的关节,我想在这个 ARM 的末端附加一个工具——另一个 ModelVisual3D。如何从父 ModelVisual3Ds 内容属性访问此复合转换,以允许我相对于其父级正确定位下一个 ModelVisual3D?

最佳答案

正如您所观察到的,当您在 Model3DGroup 中对 Model3D 进行分组时,子项的 Transform 属性与父项的属性相结合。

听起来您好像在询问如何在构成您所谓的“模型”的 Model3D 树中计算到特定 Model3D 的净变换。为此,您需要知道(或能够扫描和发现)从根 Model3DGroup 到要为其查找变换的 Model3D 的路径。

有了这条路径后,所需要做的就是组合每个级别的 Transform 属性。为此,只需构建一个 Transform3DGroup 并向其添加各个变换。

例如,如果您的机器人 ARM 具有名为“UpperArm”、“LowerArm”和“Hand”的 Model3D 组件,并且您想找出手部的位置和角度,您可以执行以下操作:

 var combined = new Transform3DGroup();
combined.Children.Add(UpperArm.Transform);
combined.Children.Add(LowerArm.Transform);
combined.Children.Add(Hand.Transform);

现在你可以找到手上的 (0,0,0) 位置,如下所示:
 combined.Transform(new Point3D(0,0,0));

同样,您可以找到其他点并使用它们来定位您的其他 ModelVisual3D。

关于WPF 3D - 使用嵌套的 Model3DGroup 变换在 3D 场景中定位 Visual3D 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2973249/

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