У меня есть плоскость с детализацией 400 на 400. Я делаю это при определении позиций y всех вершин.
var position = floorGeometry.attributes.position;
for ( var i = 0; i <= complexity + 1; i ++ ) {
for (var i2 = 0; i2 <= complexity; i2 ++) {
vertex.fromBufferAttribute( position, i * complexity + i2);
var x = vertex.x;
var y = vertex.z;
vertex.y = noise(x,y)
position.setXYZ(i * complexity + i2, vertex.x, vertex.y, vertex.z );
}
}
Сложность представляет собой детализацию самолета.
Как видите ... я использую geometry.attributes.position для доступа к вершинам, но важно отметить, что здесь хранятся все координаты "sqaure"
Но когда дело доходит до атрибута цвета ... он фактически использует точки (и ожидает массив) каждой вершины трис, составляющих плоскость, в определенном порядке ...
Я делаю массив цветов (3 элемента на вершину, представляющий rgb), а затем пытаюсь добавить его в качестве атрибута к геометрии, и я пытаюсь сделать вершины разной высоты разными цветами. Например
count = floorGeometry.attributes.position.count;
var colors = [];
for ( var i = 0; i < count; i ++ ) {
vertex.fromBufferAttribute( position, Math.floor(i)); //<---- NOTE
if (vertex.y > 500) {
colors.push(1,0,0);
}
else colors.push(0,1,0);
}
В месте кода с комментарием «ПРИМЕЧАНИЕ» я не знаю, что я здесь делаю с точки зрения преобразования индекса из этой квадратной системы в систему вершин на основе трех атрибутов цвета.
Любые идеи? Должен ли я вместо этого попытаться получить доступ к вершинам системы на основе три? Есть ли математический способ сделать это правильно?