У меня есть сфера в THREE.js (я назову ее главной сферой). Мой пользователь имеет возможность щелкнуть несколько точек на шаре, чтобы отметить углы многоугольника. Сами точки представлены в виде сфер в трехмерном пространстве и опираются на поверхность основной сферы. Когда есть три или более точек, пользователь может закрыть их и построить многоугольник.Создайте пользовательскую часть сферической формы в Three.js
В этот момент я хотел бы создать многоугольник прямо над поверхностью основной сферы. Этот многоугольник должен быть в форме того, который только что построил пользователь, а также поднялся над поверхностью главной сферы.
Я думал, что смогу создать многоугольник на поверхности сферы, а затем вытеснить каждую вершину в обычном порядке с помощью вершинного шейдера, поэтому я построил форму, используя THREE.Shape и THREE.ShapeGeometry. Это приводит к двумерной форме на оси z, поэтому я перевел форму на поверхность, а затем использовал различные комбинации THREE.SubdivisionModifier и THREE.TessellateModifier в попытке создать вершины для смещения шейдера. Кроме того, форма даже не видна после перевода, если я не использовал модификатор.
В настоящее время я использую следующую комбинацию из двух, но это приводит к очень искаженной форме.
// Create a new instance of the modifier and pass the number of divisions.
var subdivisionModifier = new THREE.SubdivisionModifier(3);
var tessellateModifier = new THREE.TessellateModifier(8);
// Apply the modifier to our cloned geometry.
for(var x=0; x<6; x++) {
tessellateModifier.modify(polyGeometry);
}
subdivisionModifier.modify(polyGeometry);
Результаты в следующем: желтый контур желаемая форма, в то время как синий контур является то, что создается. Зеленый каркас - это основная сфера.
Я построил JSFiddle для моего проекта здесь: Globe with elevated polygon
Как вы можете видеть, полученный многоугольник не принимает нужную форму. В конце концов, я думаю, мне нужно знать, иду ли я по тупиковой тропе, и если то, что я пытаюсь сделать, даже возможно.
Возникла проблема, когда (control-) щелкнул скриптом: 'TypeError: intersectionArray [0] undefined'. Правильно ли я понимаю: вы пытаетесь определить площадь поверхности на глобусе, очерченную полигоном? – Kenney
Вы правильно поняли. Я смог активировать щелчок по земному шару, щелкнув в белом пространстве в окне. Я не получаю ошибку, которую вы получаете. Я использую Chrome. – reggie3