【问题标题】:How to update points of TriangleMesh more efficiently?如何更有效地更新 TriangleMesh 的点?
【发布时间】:2019-09-19 22:52:55
【问题描述】:

所以我正在努力在 javafx 中创建一个 3D 建模工具包。在这个工具包中,人们将能够加载模型文件并在所述模型上试用动画。

目前,我将每个模型分成 TriangleMesh 对象组,其中组中的每个 Mesh 都使用相同的材​​质。然后我有一个 AnimationTimer,它对加载的动画的帧进行排序,并为每个下一帧更新每个 TriangleMesh 中的所有更改点。然而,对点列表执行频繁更新会大大降低程序的性能。

我想知道这是否可以优化?

我有一些想法,因为我认为为每个模型设置一个 TriangleMesh 可能会有所帮助(尽管这是有问题的,因为我无法设置各个面的材质)但这仍然给我留下了更新 observable 的开销积分榜如此频繁。

【问题讨论】:

    标签: java javafx optimization 3d observablecollection


    【解决方案1】:

    拥有大量独立的 TriangleMeshes 确实是非常低效的。为什么你认为你需要那个?如果您只是想将不同的纹理应用于模型的不同部分,那么您可以创建一个纹理图集。这将允许您为每个模型使用一个 TriangleMesh,这将使事情变得更加高效。您的坐标修改的影响有多大仍有待测试。

    【讨论】:

    • 您好,感谢您的回复。对于动画查看器,我真的不需要它。虽然我确实需要它在我的程序的编辑部分实现单个三角形的监听器。但是,我可以在动画查看器中切换到单个网格。我偶然发现了这个:stackoverflow.com/questions/47793288/… 和你说的类似,但我发现提到的 API (github.com/FXyz/FXyz) 有点难以理解。这主要是因为我不太熟悉数学和相关术语。
    • 您对从哪里开始寻找如何将每个三角形的颜色列表转换为纹理图集有什么建议吗?虽然我记得我之前提到的 FXyz 库中有类似的东西。我将不得不再深入研究一下,我不太了解 (u, v) 坐标的工作原理。
    • 这是微不足道的。只需创建一个 WritableImage,在您的材质中设置它并为每种颜色定义一个像素。然后使用相应像素的中心 u,v 坐标作为三角形的纹理坐标。我经常使用这个方案,效果很好。
    • 非常感谢,我成功地按照你说的做了。而且性能很流畅,我还有一个问题。并非所有颜色都正确映射在直角三角形上。目前我制作了一组(唯一)颜色,并从中创建了一个尺寸为 {unique_color_size)x1 图像的图集。然后我创建 uv 坐标,其中 {color_index} 除以 {unique_color_size) 以获得 u 坐标,作为 y 坐标,我输入 0.5f。然后我将其存储在 texcoords 数组中,并将其索引(3 次)添加到 faces 列表中。我导出 uv 坐标的方式是否正确?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2011-02-27
    • 1970-01-01
    • 2020-04-30
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多