3

我一直在玩voxeljs,我是 3D 编程新手,它在文档中说这段代码生成了“球体世界”:

generate: function(x,y,z) {
   return x*x+y*y+z*z <= 20*20 ? 1 : 0 // sphere world
},

这实际上是如何生成一个球体的?从我的简单理解来看,我认为它基本上是“循环”通过 3D 世界中的每个“块”?任何进一步的解释或指向一个好的教程都会有很大的帮助!

4

2 回答 2

5

你的功能说:

如果体素(x, y, z)是球体的一部分,则返回1,否则0

作者应用球面方程。您的球体由以下一组体素组成:

在此处输入图像描述

这基本上意味着体素是球体的一部分,如果到中心的距离(0, 0, 0)小于半径。距离是使用勾股定理计算的。通过平方半径(在您的情况下20),您可以将其与平方距离进行比较,而无需计算平方根。

于 2013-01-24T00:09:48.267 回答
4

这是基于三维空间中的距离公式,因为您可以将球体定义为距中心点一定距离内的每个点。

任意两个物体之间的距离等于 (x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 的平方根。

如果每个体素在原点的 20 个单位内,则上述函数会对其进行标记。由于原点是 (0, 0, 0),距离函数简化为 x1^2 + y1^2 + z1^2 的平方根。通过去掉平方根并将结果与​​ 20^2 进行比较,这也引发了另一种优化。

于 2013-01-24T00:09:38.987 回答