c++ - 如何在代码中使用 Unreal 4 ProceduralMeshComponent 类?

标签 c++ unreal-engine4 procedural-generation

我试图找到一些关于如何通过代码使用 Unreal 4 ProceduralMeshComponents 实现功能的示例或文档。网站上这些类的文档非常少,只提供了它们如何工作的最基本的细节:

https://docs.unrealengine.com/latest/INT/BlueprintAPI/Components/ProceduralMesh/index.html

我知道,我知道,它们已经暴露给蓝图编辑器,所以我知道我可以在引擎本身中使用它们。但是,我想了解该过程的确切来龙去脉,这意味着我需要通过代码在项目中实现它。

此外,我认为仅通过蓝图节点使用这些组件会限制使用这一强大功能所能完成的工作范围。

我还搜索了任何示例(无论是在网络上还是在论坛上),但找不到任何不涉及以某种方式使用蓝图的示例。另一个问题是这个功能是最近才引入的,在此之前 Rama(Unreal 的杰出用户)已经提出了一个允许程序网格生成的类似 API。然而,它现在已被弃用,并且有许多示例引用该版本。

别误会,我不是在贬低蓝图。我喜欢这个工具,并认为它们是 Unreal 4 中最好的部分之一。但为了我的目的,我需要从头到尾完全向我展示这个过程。

我将不胜感激您可以分享的任何资源或示例,这些资源或示例完全通过代码实现了某种效果。

最佳答案

这是一个很大的问题,因为程序网格组件可以以多种方式使用。它们只是代表一个任意的运行时生成的网格。

如果您了解 3D 应用程序中网格的数据表示,那么文档中列出的大多数函数都非常容易理解。

一个网格可以有多个 LOD。每个单独的网格 LOD 由部分组成。每个部分都可以有一个视觉表示和一个碰撞表示。对于“视觉”表示,有点位置列表、由三个点索引表示的三角形列表、连接两点的边列表、每个三角形的法线列表、每个点的 UV 空间位置列表等. 对于网格的“碰撞”表示,当然有单独的列表,在大多数情况下尺寸更小以进行更优化的计算。

根据您的用例,用您需要的数据填充这些列表。这些数据当然可以以任何方式生成,这取决于您。无论您做什么,您只需要拥有一些所需内容的数组,可以是点、边等。

can't find any that don't involve using Blueprints in some way

UE 的美妙之处在于,任何“蓝图”示例都可以充当 C++ 示例。您可以轻松地一对一地在代码上重新创建 BP 图,因为 BP 节点基于标记为 UFUNCTION(BlueprintCallable) 的 C++ 函数。对于函数的 C++ 版本,您可以通过双击节点查看 C++ 源代码。

附注我知道我不提供代码示例可能不是最好的,而是提供冗长的解释,但对于这么宽的问题,确实没有一刀切的代码片段。

此外,程序网格生成本身就是一个巨大的世界,每个单独的场景都需要数千行专门代码。如果您制作程序化地形、程序化动物和程序化椅子,您可以想象代码既非常复杂又非常具体,对于其他用例几乎毫无用处。

关于c++ - 如何在代码中使用 Unreal 4 ProceduralMeshComponent 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34710635/

相关文章:

c++ - 为什么结构的 sizeof 不等于每个成员的 sizeof 之和?

c++ - 按升序排列数组

java - OpenSimplexNoise 更高的细节级别

c++ - 编译对象的布局

c++ - UE4 类运算符 bool() 重载

unity-game-engine - 用于可模组游戏的 Unreal Engine 或 Unity

unreal-engine4 - 将纹理的 STRING 名称转换为蓝图中的 TEXTURE 引用

algorithm - 为什么单纯形噪声似乎比经典的 Perlin 噪声具有*更多*伪像?

c# - 游戏关卡意外地相互叠加

c++ - 在 C++ 中区分多项式的函数