用体素生成球体

时间:2013-01-23 23:58:28

标签: javascript 3d voxels

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

如果每个体素在原点的20个单位内,则上述功能正在标记每个体素。由于原点是(0,0,0),因此距离函数简化为x1 ^ 2 + y1 ^ 2 + z1 ^ 2的平方根。这也通过去除平方根并将结果与​​20 ^ 2进行比较而进行另一次优化。

答案 1 :(得分:2)

您的功能只是说:

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

作者只需应用sphere equation。您的球体由以下一组体素组成:

enter image description here

这基本上意味着,如果距离中心的距离(0,0,0)小于半径,则体素是球体的一部分。听起来合乎逻辑?使用毕达哥拉斯定理计算距离。通过平方半径,在你的情况下 20 ,你可以比较平方距离并保存一个平方根,这通常是性能很重。