Я пытаюсь использовать класс BufferGeormetry в первый раз. У меня есть закрытый путь значений x, y, который я пытаюсь превратить в пирамиду с произвольной базовой формой.
for (let i = 0; i < this.nodelist.length - 1; i++) {
node = this.nodelist[i];
next_node = this.nodelist[i + 1];
positions.push([node[0], 0, node[1]]);
positions.push([center[0], elevation, center[1]]);
positions.push([next_node[0], 0, next_node[1]]);
}
const geometry = new THREE.BufferGeometry();
const positionNumComponents = 3;
geometry.setAttribute(
'position',
new THREE.BufferAttribute(new Float32Array(positions), positionNumComponents)
);
В моей системе отсчета x — слева направо, z — спереди назад, а y — сверху вниз. Итак, я делаю последовательность треугольников от одной базовой точки к центру и обратно к следующей базовой точке. Затем следующий продолжается от второй базовой точки, обратно к середине, к третьей. Массив узлов имеет одну и ту же точку в позиции 0 и в конце.
Сообщение об ошибке:
THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN.
The "position" attribute is likely to have NaN values.
Я проверил массив позиций, и там нет значений NaN. что еще мне посмотреть? Есть ли лучший способ сделать это?
Я использую следующую исходную библиотеку:
https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js
Проблема в том, что вы вставляете массив в массив, что приводит к вложенным массивам. Array.push() не требует [] в качестве аргумента, как и BufferAttribute
s, так что вы можете передавать столько значений, сколько вам нужно по отдельности вне []:
// You are nesting an array inside your array
positions.push( [node[0], 0, node[1]] );
// Instead, just add 3 shallow values
positions.push(node[0], 0, node[1]);