我一直在玩voxeljs,我是 3D 编程新手,它在文档中说这段代码生成了“球体世界”:
generate: function(x,y,z) {
return x*x+y*y+z*z <= 20*20 ? 1 : 0 // sphere world
},
这实际上是如何生成一个球体的?从我的简单理解来看,我认为它基本上是“循环”通过 3D 世界中的每个“块”?任何进一步的解释或指向一个好的教程都会有很大的帮助!
你的功能说:
如果体素
(x, y, z)
是球体的一部分,则返回1
,否则0
。
作者应用球面方程。您的球体由以下一组体素组成:
这基本上意味着体素是球体的一部分,如果到中心的距离(0, 0, 0)
小于半径。距离是使用勾股定理计算的。通过平方半径(在您的情况下20
),您可以将其与平方距离进行比较,而无需计算平方根。
这是基于三维空间中的距离公式,因为您可以将球体定义为距中心点一定距离内的每个点。
任意两个物体之间的距离等于 (x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2 的平方根。
如果每个体素在原点的 20 个单位内,则上述函数会对其进行标记。由于原点是 (0, 0, 0),距离函数简化为 x1^2 + y1^2 + z1^2 的平方根。通过去掉平方根并将结果与 20^2 进行比较,这也引发了另一种优化。