我想在屏幕上绘制数百万个线段。 大多数情况下,用户只会看到某个“宇宙”区域,但用户应该能够“缩放”一次查看所有线段。
我的理解是原语是一个“三角形”,所以我必须将我的线段表示为三角形。数以百万计的三角形。
XNA是这项工作的合适工具,还是太慢?
其他细节:
P.S。:如果您需要更多细节,请告诉我。
答案 0 :(得分:0)
当您放大细节时,简单的边界框检查三角形是否可见以避免绘制不可见的对象。当用户全部缩放时,您应该应用一些折线简化算法http://www.softsurfer.com/Archive/algorithm_0205/algorithm_0205.htm,以避免绘制太多东西。
答案 1 :(得分:0)
答案 2 :(得分:0)
是的,正如费利斯所暗示的那样,简化问题集就是游戏的名称。硬件和算法存在明显的限制,因此绘制“更多东西”的唯一方法实际上是绘制“更少的东西”。
您可以使用诸如将场景划分为OctTree之类的技巧,以便您可以执行View Frustrum Culling。有大量技术可以扩展您正在绘制的内容。我最喜欢的一个是使用冒名顶替者创建一个更容易绘制的复合场景。这是一篇解释该技术的论文: http://academic.research.microsoft.com/Paper/1241430.aspx
Impostors是基于图像的基元 常用于替换复杂 * geometry *以减少 渲染显示所需的时间 复杂的场景。但是,一个大问题 是需要的大量内存 冒名顶替者。本文介绍了一个 自动放置的算法 冒名顶替者进入了一个场景 期望的帧速率图像质量 总是遇见,而同时不会 需要大量的冒名顶替者 记忆。内存要求低 由新的放置方法提供 并通过同时使用 其他加速技术如 可见性剔除和几何 详细程度。
答案 3 :(得分:0)
我的理解是原始的 是一个“三角形”,所以我将不得不这样做 将我的线段表示为三角形。 数以百万计的三角形。
不正确,XNA可以通过以下方式为您完美绘制线条:
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.LineList, vertexOffset, 0, numVertices, startIndex, primitiveCount);
(或者,如果line1的结束顶点是第2行的起始顶点,则为PrimitiveType.LineStrip。)
XNA是否适合这项工作,或者 它太慢了吗?
XNA是“一种工具”,如果你绘制了大量的线条,这肯定会比GDI +更快,并且在与Unmannaged D3D的组合中比C ++易于实现。划线是一种非常便宜的操作。我建议你只需安装XNA并做一个快速原型,看看你可以同时绘制多少行。 (我的猜测是至少100万)。然后看看你是否真的需要使用其他海报所描述的高级技术。
此外,Felice Pollano建议的“折线简化”技术不适用于单独的线条,仅适用于由三角形组成的模型(您可以将一些较小的三角形交换一次,以提高性能但减少视觉效果,如果你缩小了,那么没有人会注意到它。它也不适用于“加厚的线条”,因为它们总是由2个三角形组成。 (除非你允许弯曲的线条)。