【问题标题】:Add 3D model to PowerPoint presentation programmatically以编程方式将 3D 模型添加到 PowerPoint 演示文稿
【发布时间】:2020-07-20 12:22:28
【问题描述】:

由于 windows 10 Fall Creator 更新,您可以将 3D 模型 直接添加到 PowerPoint 演示文稿中。

我一直在使用 OpenXML 以编程方式创建 PowerPoint 文档,但是我找不到将 3D 模型 添加到PowerPoint 文档。有人知道如何实现吗?

正如史蒂夫在 cmets 中建议的那样,我创建了一个只有 3D 模型的空 pptx 文件,然后将其解压缩以查看内容。

在内容中有一个名为 media 的子文件夹,3D 内容位于其名称为“model3d1.glb”。 但是 3D 内容会自动从我使用的格式 (.3mf) 转换为 (.glb)。似乎 powerpoint 会自动将所有支持的格式转换为GL Transmission Format

我的问题:是否可以避免转换?

【问题讨论】:

  • 在 Powerpoint 中,创建一个没有内容的普通演示文稿,将其保存为 PPTX。向其中添加 3D 模型,以新名称再次保存。解压缩两者并比较 XML 内容。这至少应该为您指明正确的方向。
  • @SteveRindsberg 感谢您的建议。基于此,我已经更新了问题。请你看一下。
  • 恐怕最新的问题超出了我的工资等级。它处理 PowerPoint 的内部结构,只有开发人员可以评论。 IIRC,PPT总是对图像做类似的事情;在导入时将单向转换为应用程序内部支持的一种格式(JPG、PNG、BMP、EMF、WMF)。

标签: c# powerpoint openxml


【解决方案1】:

首先,你可能会发现你应该在OOXML中包装一个AltertanativeContent,它包含2部分,用于渲染3D模型的Choice和作为模型的图像演示器的Fallback。

其次,您可以通过包装 OOXML 元素轻松填充 Fallback 元素。但是对于 Choice 元素,您应该创建一个OpenXMLUnknowElement 并用OpenXMLAttributes 填充它。 例如,您应该有一个OpenXMLUnknowElement 用于相机、灯光、平移对象等...

我发现了一些启发式方法,可以帮助我应对解决方案,虽然它不是一个完整的解决方案,但它是一个很好的方法。

  1. PowerPoint 中所有 3D 场景中的灯光具有相同的值,因此您可以从一个简单的文件中完全使用它们:)
  2. 您可以使用默认相机,也可以使用this answer计算相机的距离。
  3. 对于meterPerModelUnit比例因子,在使用一些可用的包(例如Microsoft GLTFKhronos gltf Loader)读取和解析您的3D模型后,您可以使用thisthis轻松计算它。 公式为 1 / (2 * MaxExtentsOnXYZ)1 / MaxExtentsOnXYZ
  4. 生成备用图像是一项艰巨的任务,如果您使用一些任意图像,用户应单击它以重新加载场景。考虑到将来可能会有针对此问题的功能发布,但我发现通过使用形状框的 Extents 尺寸较低的图像来馈送零件,PowerPoint 会自动为您带来 3D 渲染模型,我不知道这是一个错误还是预期的功能。
  5. 另一种自动转到 3D 渲染场景的方法是使用 Skinned Skeletal Animations。我想不出一个简单的方法来做到这一点,但我认为这是一个可行的解决方案。请记住,正如 Microsoft 3D Models Guideline 所述,当前版本的 PowerPoint 不支持其他类型的动画(旋转、...)。
  6. 我也不知道如何计算 PreTrans,因为必须要有一个面向中心的对象。

对于第二个问题,我认为 GLB 是传输 3D 模型文件的标准方式。也正如Todd Main给我的建议,你可以直接向Microsoft Open Specs Q&A提问

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
  • @Filburt:感谢您的评论,我明白了您的意思,并将尽快更新我的答案,提供有关解决方案的更多详细信息。无论如何,这是我第一次在这里回答问题,而且我不熟悉这种文化。我只想为问题添加评论,但我没有足够的声誉。
猜你喜欢
  • 2010-10-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
相关资源
最近更新 更多