我一直在玩voxeljs,我是3D编程的新手,它在doc中说这个代码生成了“球体世界”:
generate: function(x,y,z) {
return x*x+y*y+z*z <= 20*20 ? 1 : 0 // sphere world
},
这实际上是如何产生一个球体的?从我简单的理解,我认为它基本上是“循环”通过3D世界中的每个“块”?任何进一步的解释或指向一个很好的教程将是一个巨大的帮助!
答案 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。您的球体由以下一组体素组成:
这基本上意味着,如果距离中心的距离(0,0,0)小于半径,则体素是球体的一部分。听起来合乎逻辑?使用毕达哥拉斯定理计算距离。通过平方半径,在你的情况下 20 ,你可以比较平方距离并保存一个平方根,这通常是性能很重。