用体素生成球体

Dou*_*eux 3 javascript 3d voxels

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

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

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

Luc*_*ius 5

你的函数说:

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

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

在此处输入图片说明

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