代码之家  ›  专栏  ›  技术社区  ›  avp

推荐一些二维球面映射的Bresenham类算法?

  •  2
  • avp  · 技术社区  · 17 年前

    我需要最快的球体映射算法。有点像布列森厄姆的线描。
    类似于我在《恒星控制2》(旋转行星)中看到的实现。

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

    问题的描述。
    我在2D曲面上有一个必须出现球体的位置。球体(假设它是一个地球)必须使用精细贴图进行纹理处理,并且必须具有自由缩放和旋转的能力。我想用一个贴图或一些简单的坐标变换函数来实现它:球体2D图像上的每个像素都被定义为球体圆柱形贴图中的若干像素。这使我能够实现结果图像的抗锯齿。此外,如果结果图片上的一个像素对应于原始贴图上的多个像素(例如,接近球体的极点),我还考虑使用mipmap来实现贴图。在内心深处,我觉得这可以通过一些琐碎的数学来实现。但所有这些想法都只是我的想法。

    Textured spheres without strong distortion

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

    4 回复  |  直到 9 年前
        1
  •  2
  •   comingstorm comingstorm    17 年前

    立方图 :球体投影到立方体的6条边上。现代图形卡在硬件层面支持这种纹理,包括全纹理过滤;我相信mipmapping也被支持。

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

    在这两种情况下,失真都受到严格限制。由于硬件支持,我建议使用多维数据集映射。

        2
  •  2
  •   Aaron Digulla    17 年前

    HEALPix .

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

    Example image

        3
  •  1
  •   rotoglup    17 年前

    你看过吉姆·布林的文章吗?” How to draw a sphere “?我没有完整的文章,但它看起来像你需要的。

        4
  •  1
  •   comingstorm comingstorm    17 年前

    我是StarconII的忠实粉丝,但不幸的是,我不记得行星图的细节是什么样的。。。

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

    如果你想自己滚,你可以自己光栅化。Foley,van Dam等人 计算机图形学原理与实践

    对于我在前面的评论中提出的点云思想:可以通过预选和存储曲面点的(x,y,z)坐标而不是2D地图来避免运行时参数化问题。我想对球体上的点位置进行部分随机化,这样当在屏幕上变换(向前、向后,不管是什么8^)时,它们就不会引起结构化的锯齿。在缺点方面,你必须处理“填充”因素——在你绘制颜色时将它们相加,然后除以点数。呃,还有,如果有,你会有怎么办的问题 没有分数;e、 例如,如果你想以极高的放大率放大,你需要做一些事情,比如寻找 最近的