使用体素生成球体

4

我一直在尝试使用voxeljs,我对3D编程并不熟悉,在文档中说这段代码生成了“球形世界”:

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

这个代码是如何生成一个球体的呢?按照我的简单理解,它基本上是在三维世界中“循环”每个“块”,然后组成了球体?如果您需要更进一步的解释或者一个好的教程,请告诉我,我可以帮到您!

2个回答

6

您的函数如下:

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

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

enter image description here

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


4

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

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

上述函数标记了每个体素是否在距原点20个单位以内。由于原点为(0,0,0),距离公式简化为平方根x1^2 + y1^2 + z1^2。这还通过消去平方根带来了另一个优化,并将结果与20^2进行比较。


抱歉回复晚了,Mark。我在那里失去了网络连接。我喜欢Lucius的好看的图片;)但是由于你更快,我会改变我的答案,但还是谢谢Lucius。 - Doug Molineux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接