Звучит так, как будто вы хотите изменить трехмерную геометрию подразделенного икосаэдра на основе текстуры карты высот, немного похоже на Обработка> Примеры> Демки> Графика> Me sh Tweening :
![mesh tweening processing sample flat plane with a grayscale texture](https://i.stack.imgur.com/hC0qz.jpg)
![mesh tweening processing sample distorted plane with a mountains/valleys based on grayscale values](https://i.stack.imgur.com/Bcv1U.jpg)
Имейте в виду, что вы делаете это на поверхности, которая не является плоской плоскостью, поэтому смещение z может не дать вам того эффекта, которого вы добиваетесь, поскольку этот z будет меняться в зависимости от того, с какой стороны икосаэдра вы находитесь.
эта часть:
PVector vtemp=ico1.getVertex(i);
pz=brightness(images[0].get((int)(ico1.getTextureU(i)),(int)(ico1.getTextureV(i))))*16;
vtemp=vtemp.set(vtemp.x,vtemp.y,pz);
ico1.setVertex(i,vtemp);
нужно будет изменить.
Вам нужно будет вычислить нормаль (перпендикулярно) в этой позиции вершины: это скажет вам, в каком направлении к go с учетом угла на поверхности икосаэдра.
Масштабирование (умножение) этого вектора на значение высоты (значение яркости, отображенное в ультрафиолетовом диапазоне) будет смещать всю эту нормаль в том же направлении, но либо больше наружу или внутрь относительно икосаэдра.
Просто добавьте положение вершины к масштабированной нормали вершины, чтобы перевести ее в правильное положение. Что-то вроде:
PVector vtemp = ico1.getVertex(i);
float elevation = brightness(images[0].get((int)(ico1.getTextureU(i)),(int)(ico1.getTextureV(i))))*16
PVector vNormal = getVertexNormal(vtemp);
PVector elevatedVertex = PVector.add(vtemp, PVector.mult(vNormal,elevation));
ico1.setVertex(i,elevatedVertex);
Где getVertexNormal()
будет вычислять или извлекать предварительно рассчитанную нормаль вершины для этой вершины. Есть несколько ресурсов, вот один на Компьютерная графика StackExchange
Вот визуальное объяснение с использованием Blender: ![Blender subdivided Icosahedron mesh selected vertex normal translation](https://i.stack.imgur.com/Fog0O.gif)
Я рекомендую проверить HE_Me sh Библиотека обработки (которую можно легко установить с помощью Contribution Manager), поскольку она обеспечит множество инструментов трехмерной геометрии.
Кроме того, если вы также можете посмотреть на смещение отображение и / или нормальное отображение