我们为庞大的数据集生成图表。我们说的是每秒 4096 个样本,每张图 10 分钟。一个简单的计算得出每个线图有 4096 * 60 * 10 = 2457600 个样本。每个样本都是一个双精度(8 字节)精度的 FP。此外,我们在一个屏幕上渲染多个线图,最多大约一百个。这使得我们在一个屏幕上渲染了大约 25M 的样本。使用常识和简单的技巧,我们可以使用 CPU 在 2D 画布上绘制此代码来获得高性能。高性能,即渲染时间低于一分钟。由于这是科学数据,我们不能遗漏任何样本。说真的,这不是一个选择。甚至不要开始考虑它。
自然,我们希望使用所有可用的技术来改进渲染时间。多核、预渲染、缓存都很有趣,但不要削减它。我们希望这些数据集的渲染速度至少为 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,因此数据会失真。你也可以反对相反的观点,但事实是第一个参数对我们使用的数据集很重要。这正是我们不能省略样本的原因。