我一直在使用voxeljs,我是3D编程的新手,它在doc中说这段代码生成了“球体世界”:
generate: function(x,y,z) {
return x*x+y*y+z*z <= 20*20 ? 1 : 0 // sphere world
},这实际上是如何生成球体的?从我的简单理解来看,我认为它基本上是在3D世界中的每个“块”中“循环”?任何进一步的解释或指向一个好的教程将是一个巨大的帮助!
发布于 2013-01-24 08:09:39
这基于三维空间中的距离公式,因为您可以将球体定义为中心点一定距离内的每个点。
任意两个物体之间的距离等于(x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2的平方根。
上面的函数是标记每个体素,如果它们在原点的20个单位内。由于原点是(0,0,0),因此距离函数简化为x1^2 + y1^2 + z1^2的平方根。这还抛出了另一个优化,去掉平方根,并将结果与20^2进行比较。
发布于 2013-01-24 08:09:48
你的函数说:
如果
(x, y, z)处的体素是球体的一部分,则返回1,否则返回0。
作者应用了sphere equation。球体由以下体素集构成:

这基本上意味着,如果到中心(0, 0, 0)的距离小于半径,则体素是球体的一部分。该距离是使用毕达哥拉斯定理计算的。通过平方半径(在本例中为20),可以将其与平方距离进行比较,而无需计算平方根。
https://stackoverflow.com/questions/14491627
复制相似问题