2

我需要最快的球体映射算法。有点像布雷森汉姆的画线。
类似于我在 Star Control 2(旋转行星)中看到的实现。
是否有任何已经发明和/或实施的技术?

我真的不想重新发明自行车。请帮忙...

问题描述。
我在 2D 表面上有一个必须出现球体的地方。球体(让它成为地球)必须使用精细地图进行纹理化,并且必须具有自由缩放和旋转的能力。我想用地图或一些简单的坐标变换函数来实现它:球体的 2D 图像上的每个像素都被定义为球体圆柱图的像素数。这使我能够实现结果图像的抗锯齿。如果结果图片上的一个像素对应于原始地图上的多个像素(例如,靠近球体的两极),我还考虑使用 mipmap 来实现映射。在内心深处,我觉得这可以通过一些微不足道的数学来实现。但所有这些想法只是我的想法。

这个问题与这个问题有点相关:Textured spheres without strong disconnect,但我的问题没有答案。

UPD:我想我没有硬件支持。我想要一个跨平台的解决方案。

4

4 回答 4

2

进行这种映射的标准方法是立方体贴图:球体投影到立方体的 6 个边上。现代显卡在硬件层面支持这种纹理,包括全纹理过滤;我相信 mipmapping 也被支持。

另一种方法(硬件未明确支持,但可以通过程序着色器以合理的性能实现)是抛物线映射,它将球体投影到两个相对的抛物线上(每个抛物线都映射到中间的一个圆)方形纹理)。抛物线投影不是投影变换,因此您需要“手动”处理数学。

在这两种情况下,失真都受到严格限制。由于硬件支持,我推荐立方体贴图。

于 2009-02-19T09:49:39.817 回答
2

有一个很好的新方法可以做到这一点:HEALPIx

与任何其他映射相比的优势:

  1. 位图可以分成相等的部分(很少失真)
  2. 具有任意精度的非常简单的球体递归几何。

示例图像

于 2009-02-19T10:07:57.260 回答
1

我是 StarconII 的忠实粉丝,但不幸的是我不记得行星绘图的细节......

第一个选项是对球体进行三角剖分并使用标准 3D 多边形绘制它。就多样性而言,这有一定的弱点,但它使用了可用的硬件加速,并且可以看起来相当不错。

如果你想自己滚动,你可以自己光栅化它。Foley、van Dam 等人的计算机图形学——原理与实践有一章是关于 Bresenham 式算法的;您需要有关“扫描转换椭圆”的部分。

对于我在之前的评论中建议的点云想法:您可以通过预先选择和存储表面点的 (x,y,z) 坐标而不是 2D 地图来避免运行时参数化问题。我正在考虑部分随机化球体上的点位置,这样它们在转换(向前,向后,无论 8 ^)到屏幕上时不会导致结构化混叠。不利的一面是,您必须处理“填充”因素——在绘制颜色时总结颜色,然后除以点数。呃,还有,没有积分的话,你就有问题了,怎么办; 例如,如果您想以极高的放大倍率放大,您需要在这种情况下寻找最近的点。

于 2009-02-20T22:48:47.427 回答
1

您看过 Jim Blinn 的文章“如何绘制球体”吗?我无法访问完整的文章,但它看起来像你需要的。

于 2009-02-26T07:10:17.867 回答