在屏幕上绘制数百万个片段

时间:2011-01-25 15:01:43

标签: graphics xna

我想在屏幕上绘制数百万个线段。 大多数情况下,用户只会看到某个“宇宙”区域,但用户应该能够“缩放”一次查看所有线段。

我的理解是原语是一个“三角形”,所以我必须将我的线段表示为三角形。数以百万计的三角形。

XNA是这项工作的合适工具,还是太慢?

其他细节:

  1. 这不适用于游戏,而是适用于某些流程的建模程序。
  2. 我不在乎使用哪种语言(XNA被推荐给我)
  3. P.S。:如果您需要更多细节,请告诉我。

4 个答案:

答案 0 :(得分:0)

当您放大细节时,简单的边界框检查三角形是否可见以避免绘制不可见的对象。当用户全部缩放时,您应该应用一些折线简化算法http://www.softsurfer.com/Archive/algorithm_0205/algorithm_0205.htm,以避免绘制太多东西。

答案 1 :(得分:0)

This guy遇到了同样的问题,this可能会有所帮助(here是来源)。

答案 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个三角形组成。 (除非你允许弯曲的线条)。