Перенос GeometryUtils.merge() в geometry.merge()

#javascript #three.js

#javascript #three.js

Вопрос:

При переходе с r66 на r67 я получаю сообщение:

УСТАРЕВШИЙ: GeometryUtils .merge() был перемещен в Geometry. Вместо этого используйте geometry.merge( geometry2, matrix, materialIndexOffset ).

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

ТРИ.GeometryUtils.merge(cgeo, cloudgeometry);

Я попробовал следующее:

cgeo.merge(cloudgeometry.geometry,cgeo.matrixWorld);

Редактировать, также попробовал следующее, которое дает тот же результат, что и выше:

cgeo.merge(cloudgeometry.geometry);

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

Для этого последнего изменения нет документации, поэтому я пытаюсь понять, как это работает вслепую, если бы это была простая миграция 1 на 1, это было бы неплохо, поскольку это сработало бы, но, похоже, способ его работы полностью изменился.

Ответ №1:

Убедитесь, что матрица была обновлена перед слиянием. Код, вероятно, должен выглядеть примерно так:

 cloudgeometry.updateMatrix();
cgeo.merge( cloudgeometry.geometry, cloudgeometry.matrix );
 

Комментарии:

1. Я попробую это здесь в ближайшее время и вернусь к вам, но, как я и подозревал, в изменении было нечто большее, чем старая строка, это не изменение 1 к 1 в других словах, спасибо за предложение!

2. Блестяще, это сделало это и, по-видимому! По-видимому, у меня был совершенно неправильный второй аргумент, поскольку у меня был cgeo, а не cloudgeometry, а также matrixWorld, а не просто matrix, но в тот день это был 14-часовой рабочий день, так что неудивительно.. Приветствия!

3. Да, это больше не волшебный oneliner, но я думаю, что текущий подход намного более мощный и чистый.

4. Особенно учитывая, что, по-моему, я читал, что это была улучшенная производительность. Я называю это решаемым, спасибо!