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

标签 algorithm graphics cross-platform rendering

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

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

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

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

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

最佳答案

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

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

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

关于algorithm - 推荐一些类似于 Bresenham 的二维球面映射算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/564492/

相关文章:

python - 如何将我的 kivy 应用程序连接到支持网站的在线 mySQL 数据库?

java - 如何在 Java 中呈现视觉上有意义的 2D FFT?

algorithm - 使用 cordic 算法生成正弦

algorithm - 如何实现一个特性推荐引擎?

Android Matrix setValues() 行主或列主

graphics - 启动 arch 时出现 nouveau 错误

algorithm - 是否有确定最小可解线性方程组的算法

android - 能否为 Android Canvas 上的 Drawable 禁用抗锯齿功能?

c++ - 如果在 C++ 模板库中使用禁用的库功能,则警告用户