gpt4 book ai didi

.net - 使用 3D 加速的图形渲染

转载 作者:行者123 更新时间:2023-12-04 04:54:37 24 4
gpt4 key购买 nike

我们为庞大的数据集生成图表。我们说的是每秒 4096 个样本,每张图 10 分钟。一个简单的计算得出每个线图有 4096 * 60 * 10 = 2457600 个样本。每个样本都是一个 double (8 字节)精度的 FP。此外,我们在一个屏幕上渲染多个线图,最多大约一百个。这使得我们在一个屏幕上渲染了大约 25M 的样本。使用常识和简单的技巧,我们可以使用 CPU 在 2D Canvas 上绘制此代码来获得高性能。高性能,即渲染时间低于一分钟。 由于这是科学数据,我们不能遗漏任何样本。说真的,这不是一个选择。甚至不要开始考虑它。

自然,我们希望使用所有可用的技术来改进渲染时间。多核、预渲染、缓存都很有趣,但不要削减它。我们希望这些数据集的渲染速度至少为 30FPS,首选 60FPS。我们现在这是一个雄心勃勃的目标。

卸载图形渲染的一种自然方法是使用系统的 GPU。 GPU 可用于处理庞大的数据集并并行处理它们。一些简单的 HelloWorld 测试向我们展示了使用 GPU 在渲染速度上的昼夜差异。

现在的问题是:OpenGL、DirectX 和 XNA 等 GPU API 是为 3D 场景而设计的。因此,使用它们来渲染 2D 线图是可能的,但并不理想。在我们开发的概念证明中,我们遇到了需要将 2D 世界转换为 3D 世界的情况。突然间,我们必须使用 XYZ 坐标系和多边形、顶点等等。从发展的角度来看,这远非理想。代码变得不可读,维护是一场噩梦,还有更多的问题。

您对此 3D 有什么建议或想法?执行此操作以实际转换两个系统(2D 坐标与 3D 坐标和实体)的唯一方法是什么?还是有更时尚的方法来实现这一目标?

- 为什么在一个像素上渲染多个样本很有用?
因为它更好地代表了数据集。假设在一个像素上,您有值 2、5 和 8。由于某些样本省略算法,只绘制了 5。这条线只会到 5,而不是 8,因此数据会失真。你也可以反对相反的观点,但事实是第一个参数对我们使用的数据集很重要。
这正是我们不能省略样本的原因。

最佳答案

在 tgamblin 的回答后面,我想对您不能省略样本的断言发表评论。

您应该将绘制到屏幕上的数据视为抽样问题。您正在谈论 240 万个数据点,并且您正试图将其绘制到一个只有几千个点的屏幕上(至少我假设是这样,因为您担心 30fps 的刷新率)

因此,这意味着对于 x 轴上的每个像素,您都不需要渲染大约 1000 个点。即使您确实走上了利用 gpu 的道路(例如,通过使用 opengl),对于不可见的行,gpu 仍然需要做大量的工作。

我用来呈现样本数据的一种技术是生成一组数据,它是整个数据集的子集,仅用于渲染。
对于 x 轴上的给定像素(即给定 x 轴屏幕坐标),您需要渲染 绝对 最多 4 个点 - 即最小 y、最大 y、最左侧 y 和最右侧 y。
这将呈现所有可以有用呈现的信息。您仍然可以看到最小值和最大值,并保留与相邻像素的关系。

考虑到这一点,您可以计算出将落入 x 轴上同一像素的样本数(将它们视为数据“箱”)。在给定的 bin 内,您可以确定最大值、最小值等的特定样本。

重申一下,这只是用于显示的子集 - 并且仅适用于显示参数更改之前。例如。如果用户滚动图形或缩放,则需要重新计算渲染子集。

如果您使用的是 opengl,则可以这样做,但由于 opengl 使用标准化坐标系(并且您对现实世界的屏幕坐标感兴趣),您将不得不更加努力地准确确定您的数据箱。
如果不使用 opengl,这会更容易,但是您无法充分利用图形硬件。

关于.net - 使用 3D 加速的图形渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/219872/

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