UV球体中的点数

时间:2016-11-15 14:51:48

标签: graphics 3d mesh uv-mapping

我正在尝试从半径为r的球体生成网格。我的目标是创建一个UV球体,使得多面体上的每个点与球体的距离都小于tol

以下代码在球体上创建点网格。如何计算parallels_countmeridians_count,以便网格的所有点都在公差范围内?

  for j in parallels_count:
     parallel = PI * (j+1) / parallels_count
  for i in meridians_count:
     meridian = 2.0 * PI * i / meridians_count
  return spherical_to_cartesian(meridian, parallel)

代码来自here,这是UV球的图片:

this

网格的每个面与球体之间的距离将围绕面部的中心最大。 因此,对于面部与球体之间的距离小于tol,面部边缘与相应圆周之间的距离小于tol是不够的。 这张照片已脱离背景,但有助于我解释我的意思。

enter image description here

1 个答案:

答案 0 :(得分:1)

点之间的最大距离是在赤道上,所以如果我没有弄错的话应该使用圆周来获得角度步长...

dangle = tol/r; //[rad]

其中r是与tol相同单位的球半径,您可以使用较小的步骤来确保dangle*=0.75;parallel和{{1}都使用此步骤}角度。

如果您想要计数,请尝试:

meridian

现在还在这里,所以我希望我没有犯任何愚蠢的数学错误(最简单的东西是最糟糕的愚蠢错误)。

另请参阅我的一些相关 QA

[Edit1]以及meridians_count = (2.0*PI*r/tol)+1; // ceil or +1 just to be sure parallels_count = 0.5*meridians_count; 的新定义会改变所有内容

我这样看:

tol

tol

如果转换为sphericalsurface而不是最大差异在uv网格单元的中心,代表sin(da/2) = (r-tol)/r da = 2.0*asin((r-tol)/r) 对角线,请尝试使用:

sqrt(2)*da

所以你的角度步应该比那个小......