C#创建“线框”/ 3D“地图”

时间:2010-03-22 07:38:20

标签: c# winforms

image http://prod.triplesign.com/map.jpg

如何以最简单的方式在C#窗体中生成类似的输出?

为此目的有一个好的图书馆吗? 我只需要指出图形库最适合的方向。

5 个答案:

答案 0 :(得分:3)

您应该在3D图形库中滚动自己。你可以使用directx。如果使用内置的WPF,则可以查找viewport3d。 http://msdn.microsoft.com/en-us/magazine/cc163449.aspx

在图形编程中,您正在构建的是一个非常简单的高度图版本。我认为,建立自己的产品从长远来看会给你更大的灵活性。

答案 1 :(得分:2)

因此最佳库不存在。有很多,有些只是为了不同的目的。这里有一小部分可能性:

  • Tao:自己使用OpenGL做任何事情
  • OpenTK:Tao框架的继承者
  • Dundas:最好但又相当昂贵(缺乏实时性能)
  • Nevron:非常好,但便宜得多(实时数据也有问题)
  • National Instruments:昂贵,不是最好看的,但实时数据非常好。
  • ......可能还有其他人做过其他一些经历。

答案 2 :(得分:1)

答案 3 :(得分:0)

以下是我使用OpenGL实现这一点的方法。

首先,您需要一个包装器将OpenGL API导入C#。一点谷歌搜索让我想到了这个:

CsGL - OpenGL .NET

有一些示例程序可用于演示OpenGL接口的工作原理。与他们一起玩,了解系统的工作原理。

实施3D地图:

  1. 创建一个向量数组(不是std :: vector / List类型,而是x,y,z三元组),其中x和y沿水平面,z是向上量。
  2. 将Z比较设置为小于或等于(因此可以看到重叠的线段)。
  3. 创建一个四边形列表,其中四边形的顶点取自(1)
  4. 中的数组
  5. 计算四边形的颜色。使用四边形法线和光源方向的点积得到一个值为阴影值,即normal.light为1为黑色,-1为白色。
  6. 再次从(1)中的数组创建线段列表。
  7. 计算各种投影轴点的屏幕位置。
  8. 设置相机和world->视图转换(使用示例程序了解如何执行此操作)。
  9. 渲染四边形和直线,OpenGL将从世界坐标((1)中的列表)到屏幕空间进行转换。绘制标签时,您可能不希望使用OpenGL执行此操作,因为标签不应随着距离相机的距离而缩放,否则它们可能会变得太小而无法读取。
  10. 由于以上内容相当多,所以没有真正的空间(以及我的时间)发布工作代码(但如果你很幸运,其他人可能会添加一些内容)。你可以打破任务,对你不太了解的部分提出问题。

答案 4 :(得分:0)

你试过这个...... gigasoft data visualization tools(它不是免费的)

您可以在此处查看online线框演示