gpt4 book ai didi

c# - WPF 性能与文本

转载 作者:行者123 更新时间:2023-11-30 17:44:47 27 4
gpt4 key购买 nike

我正在创建一个带有 Viewport3D 的 WPF 应用程序,在视口(viewport)内我有带有文本的网格。每个网格的文本都不同。 (这意味着我可以为常规网格的 Material 提供单一引用,但对于文本我每次都需要创建不同的 Material 。)我还卡住了所有常规网格,因为它们是静态的。

不过,我可以使用 SolidColorBrush 创建任意数量的网格,并且性能保持稳定。 (我已经尝试了大约 700 - 800 目)

但是,如果我实现文本网格,性能会急剧下降。例如,当我有大约 200 个常规网格和 200 个文本网格时,性能非常糟糕。

我尝试了两种不同的方式来呈现文本; - 我尝试将文本渲染为 Viewport2DVisual3D。 (但我认为这是一种糟糕的方式,因为这意味着在我之前的示例中,除了 Viewport3D 本身之外还有 200 个视口(viewport)。) - 我曾尝试将文本渲染为 GeometryModel3D,因此创建与常规画笔相同。但是, Material 由 VisualBrush 而不是 SolidColorBrush 组成。 (这确实提高了性能不少,但仍然不完美)

有没有人有解决方案来进一步提高我渲染文本的性能,以便我可以渲染更多内容?

(我已经遵循了以下网站上的大部分性能指南: https://msdn.microsoft.com/en-us/library/bb613553%28v=vs.110%29.aspx )

@编辑:我发现如果我用视觉画笔执行以下操作:

VisualBrush v = new VisualBrush(Text.createCubeStackText(text1));
RenderOptions.SetCachingHint(v, CachingHint.Cache);
viewport.Material = new DiffuseMaterial(v);

它确实提高了性能。我已经尝试过,现在可以渲染 700 个常规网格和 300 个文本网格而没有任何性能问题。 550 个文本网格和 550 个常规网格的性能开始下降。

(不过,我仍然希望得到任何其他建议。)

最佳答案

由于渲染文本所需的曲面分割,3D 中的文本可能会非常慢。您可能需要考虑:

  1. 通过用 Canvas 覆盖 3DViewport 来移除文本的 3D 呈现,并计算文本的正确位置并将文本呈现为 2D 覆盖。您甚至可以根据文本位置的 Z 值更改字体大小

  2. 将文本渲染为(透明)位图并将文本作为纹理添加到 3D 场景中的广告牌

使用 IsHitTestVisible=false 点击叠加层并将文本的 3D 位置投影到 Canvas 上:Projecting a 3D point to a 2D screen coordinate

关于c# - WPF 性能与文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29005869/

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