Как получить обновленные атрибуты буфера в Threejs

#three.js

#three.js

Вопрос:

Когда я применяю матрицу к buffergeometry, я хочу быстро получить обновленные атрибуты положения, я имею дело с более чем 1000000 вершинами.

Я пробовал Matrix4.applyToBufferAttribute() , но атрибут buffer по-прежнему тот же

Каков наиболее правильный способ выполнить это?

Ответ №1:

Я пробовал Matrix4.applyToBufferAttribute() , но атрибут buffer по-прежнему тот же

Тогда, похоже, вы делаете что-то не так в своем приложении. Matrix4.applyToBufferAttribute() применяет матрицу к данному атрибуту. Этот метод используется несколько раз в ядре three.js , например, в BufferGeometry.applyMatrix() :

https://github.com/mrdoob/three.js/blob/9f7f38b543c8a51d5614b72c04d657a4cfad68da/src/core/BufferGeometry.js#L141-L142

Убедитесь, что после вызова метода установлено BufferAttribute.needsUpdate значение true . И да, это предполагаемый способ применения матрицы преобразования 4×4 к атрибуту буфера.

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

1. BufferAttribute.needsUpdate = true Изменяет ли буфер в графическом процессоре?

2. Правильно. Если установлено значение true , это указывает движок для обновления фактического буфера WebGL.

3. когда я регистрируюсь meshes[1].applyMatrix(mat); перед этим и после этого, я получаю одинаковые значения, одинаковые Mesh.matrix , одинаковые Mesh.geometry.attributes.position , это нормально?

4. Mesh.matrix должны быть идентичны. Данные атрибута действительно должны измениться. Не могли бы вы, пожалуйста, продемонстрировать проблему на живом примере ?