Three.js: получайте обновленные вершины с целями морфинга

У меня есть несколько целей морфинга:

https://jsfiddle.net/3wtwzuh3/2/ (используйте ползунок, чтобы увидеть трансформацию)

Однако я хотел бы иметь доступ к новым позициям вершин после преобразования. Если вы заметили в связанном примере, я показываю координату y первой вершины куба, и она не обновляется!

// This Y vertex doesn't seem to update!
   elInfo.innerHTML = geometry.vertices[0].y;

Можно ли получить новые должности? Я пытался установить все виды флагов и не повезло.

Спасибо!

Обратите внимание, что этот пример предназначен только для целей вопроса, он немного сложнее в моем реальном проекте (где мне нужны данные вершин!).


person AlexKempton    schedule 06.04.2016    source источник


Ответы (1)


Морфы обновляются на GPU, а не на CPU. Поэтому, если вы хотите узнать новую позицию вершины, вам нужно выполнить те же вычисления на ЦП, что и на графическом процессоре.

Метод Mesh.raycast() должен выполнять этот расчет для рейкастинга на ЦП, поэтому вы можете сослаться на этот код в качестве примера.

Вот простой шаблон, которому вы можете следовать. Вам придется адаптировать это для вашего полного приложения, так как этот шаблон жестко привязан к вашей простой скрипке.

var morphTargets = mesh.geometry.morphTargets;
var morphInfluences = mesh.morphTargetInfluences;

var vA = new THREE.Vector3();
var tempA = new THREE.Vector3();

var fvA = geometry.vertices[ 0 ]; // the vertex to transform

for ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {

    var influence = morphInfluences[ t ];

    if ( influence === 0 ) continue;

    var targets = morphTargets[ t ].vertices;

    vA.addScaledVector( tempA.subVectors( targets[ 0 ], fvA ), influence ); // targets index must match vertex index

}

vA.add( fvA ); // the transformed value

скрипка: https://jsfiddle.net/3wtwzuh3/3/

три.js р.75

person WestLangley    schedule 06.04.2016
comment
Именно то, что мне нужно было знать. Большое спасибо, это сработало отлично! - person AlexKempton; 07.04.2016
comment
@AlexKempton Это будет работать для вершин. Допустим, у меня есть сетка на одной из граней. Как я могу вычислить расстояние для перемещения сетки во время морфинга? Вы можете увидеть это здесь jsfiddle.net/rt9ye5fq/12. Я хочу, чтобы красный прямоугольник был у меня всегда на лице даже при морфинге - person Aniket Betkikar; 11.02.2019