Генерация сферы с помощью 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, вы можете сравнить его с квадратным расстоянием и сохранить квадратный корень, который обычно сильно влияет на производительность.