Я попытался реализовать апплет, показывающий различные типы пробелов с библиотекой Marching Cubes из Three.js для визуализации неявных поверхностей. Хотя фигуры, которые появляются, не правильные, и я предполагаю, что я не реализую свойства THREE.MarchingCubes
по мере необходимости. Ядро апплета имеет следующий код
quadricData = {
a11: 1,
a22: 1,
a33: 1,
a12: 0,
a13: 0,
a23: 0,
a1: 0,
a2: 0,
a3: 0,
a: -1
};
quadValue = function (data, x, y, z) {
return data.a11*x*x+
data.a22*y*y+
data.a33*z*z+
data.a12*2*x*y+
data.a13*2*x*z+
data.a23*2*y*z+
data.a1*x+
data.a2*y+
data.a3*z+
data.a;
}
var res = 50;
var material = new THREE.MeshPhongMaterial( {
color: '#1565C0', // blue 800
transparent: true,
opacity: 0.8,
side: THREE.DoubleSide,
flatShading: true
} );
quadric = new THREE.MarchingCubes( res, material );
quadric.isolation = 0;
for ( var k = 0 ; k < res ; k++ ) {
for ( var j = 0 ; j < res ; j++ ) {
for ( var i = 0 ; i < res ; i++ ) {
var x = 8*(i-res/2)/res;
var y = 8*(j-res/2)/res;
var z = 8*(k-res/2)/res;
quadric.field[ i + j*res + k*res*res ] = quadValue(quadricData,x,y,z);
}
}
}
но полный код может быть проверен здесь . Я полагаю, что атрибут field
должен быть заполнен значениями функции, но, возможно, это неправильный способ продолжения. Странные эффекты появляются, например, при увеличении a11
, которое расширяет эллипсоид вместо его уменьшения; «сетка марширующих кубов», кажется, тоже расширяется, что довольно забавно.
Многие другие конфигурации не соответствуют ожидаемому результату. Как правильно использовать THREE.MarchingCubes
?