Генерация сферы с помощью Voxel

Я играл с voxeljs, я новичок в 3D-программировании, и в документе говорится, что этот код генерирует "мир сфер":

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

Как это на самом деле создает сферу? Исходя из моего простого понимания, я думаю, что это в основном "циклы" через каждый "кусок" в мире 3D? Любое дальнейшее объяснение или указание на хороший урок по этому вопросу очень помогло бы!

2 ответа

Решение

Это основано на формуле расстояния в трехмерном пространстве, поскольку вы можете определить сферу как каждую точку на определенном расстоянии от центральной точки.

Расстояние между любыми двумя объектами равно квадратному корню из (x1-x2)^2 + (y1-y2)^2 + (z1-z2)^2.

Вышеупомянутая функция помечает каждый воксел, если они находятся в пределах 20 единиц от источника. Так как начало координат (0, 0, 0), функция расстояния упрощается до квадратного корня из x1^2 + y1^2 + z1^2. Это также добавляет другую оптимизацию, избавляясь от квадратного корня и сравнивая результат с 20^2.

Ваша функция просто говорит:

Если воксель в (x, y, z) является частью сферы, возврат 1 иначе 0 ,

Автор просто применяет уравнение сферы. Ваша сфера образована следующим набором вокселей:

Это в основном означает, что воксел является частью сферы, если расстояние до центра, в вашем случае (0, 0, 0), меньше радиуса. Звучит логично? Расстояние рассчитывается по теореме Пифагора. Выравнивая радиус, в вашем случае 20, вы можете сравнить его с квадратным расстоянием и сохранить квадратный корень, который обычно сильно влияет на производительность.

Другие вопросы по тегам