У меня есть плоскость с детализацией 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 для доступа к вершинам, но важно отметить, что здесь хранятся все "квадратные" координаты
Но когда дело доходит до атрибута цвета ... он фактически использует точки (и ожидает массив) каждой и каждой вершины триса, которые составляют плоскость в определенном порядке..
Я занимаюсь созданием массива цветов (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);
}
В точке кода с комментарием «ПРИМЕЧАНИЕ» я не знаю, что я здесь делаю, с точки зрения передачи индекса из этой квадратной системы в систему вершин, основанную на трехцветных атрибутах.
Есть идеи?Должен ли я попытаться получить доступ к вершинам системы, основанной на tri?Есть ли математический способ сделать это правильно?