我已将app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.useXDomain = false;
$httpProvider.defaults.withCredentials = false;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
放入3D面板(Planerator),并使用TextBlock
为其设置动画。 (作为抓取文本)
当视野为1时,一切正常,但如果我将视野设置为50以上,帧速率将急剧下降,渲染将会波动。
我使用了Storyboard
。
请参阅以下图片:
我需要在3d视图中使用2D动画并获得良好的性能。
请告诉我如何解决这个问题?我应该离开WPF并转到DirectX吗?
更新1:
我只想在3D空间中移动 ONE 2Dtext,但性能很差。(渲染不顺畅,不稳定)
更新2:
这是基于cokeman19答案的sample project更新版本。 (性能已提高~10帧,但我需要完美渲染)
更新3:
最后,在cokeman19的答案和this page的内容的帮助下,我获得了可接受的表现。
答案 0 :(得分:3)
我不确定它是否只是示例应用的副产品,但在Planerator.CreateVisualChild()
下,似乎没有必要设置GeometryModel3D.BackMaterial
。供参考:
VisualBrush vb = new VisualBrush(_logicalChild);
SetCachingForObject(vb); // big perf wins by caching!!
Material backMaterial = new DiffuseMaterial(vb);
...
GeometryModel3D backModel = new GeometryModel3D() { ..., BackMaterial = backMaterial };
BackMaterial
是逻辑子项周围的VisualBrush
包装器,它不属于可视化树,因此渲染似乎并不存在在这里有意义。此外,逻辑子(LayoutInvalidationCatcher
类)又是 visual 子项的包装器,它已在设置_logicalChild
时呈现(使用frontModel.Visual
) }。
删除用于创建和设置BackMaterial
的代码会使FPS达到~55。
此外,如果它是一个选项,设置以下内容可使FPS恢复到60,质量没有明显下降。
RenderOptions.SetEdgeMode(_viewport3d, EdgeMode.Aliased);
更新
我能够做的唯一其他收获是将CacheMode
设置为BitmapCache
,这可能无法满足您的需求。
frontModel.CacheMode = new BitmapCache(20) { EnableClearType = false };
即使在我最慢的机器上,这也允许最大的FPS,但是存在一些缺点。因为文本元素上的缩放级别如此之高,并且这种技术创建了一个在动画中使用的图片(而不是动画UIElement本身),所以我必须将比例级别设置为20才能几乎在视觉上不易察觉。这当然也有记忆含义。