2015-06-25 2 views
0

У меня есть PointCloud, называемый «облаком» с центром в (0,0,0) с примерно 1000 вершинами. Позиции вершин обновляются с помощью вершинного шейдера. Теперь я хотел бы распечатать каждую позицию вершины на консоли каждые несколько секунд из цикла визуализации.Вершины вершин PointCloud всегда верны (0,0,0)

Если я осмотреть вершины точки помутнения, используя

console.log(cloud.geometry.vertices[100]) 

в визуализации цикла, я всегда получаю вершину со всеми нулями, которые я могу видеть все частицы проносясь вокруг не так.

Я смотрел на эту аналогичную должность: How to get the absolute position of a vertex in three.js? и попытался

var vector = cloud.geometry.vertices[100].clone(); 
vector.applyMatrix4(cloud.matrixWorld); 

который еще дал мне вектор всех нулей (для всех вершин). Использование scene.matrixWorld вместо cloud.matrixWorld тоже не сработало.

Я также пробовал использовать cloud.updateMatrixWorld() и scene.updateMatrixWorld(). Наконец, я попытался установить cloud.geometry.vertexNeedsUpdate = true.

До сих пор все советы, которые я видел, использовали выше, но никто из них не работает для меня. У меня такое ощущение, что массив просто не обновляется с правильными значениями, но я не знаю, почему это так. Есть идеи?

ответ

0

Это потому, что вершины никогда не меняют свои свойства на процессоре, а только на gpu (вершинный шейдер). Это билет в один конец, сообщение идет cpu -> gpu, а не наоборот.

Если вам нужно работать с позицией вершин, вам нужно выполнить вычисления на процессоре и отправить пакет вершин каждый раз, когда что-то изменилось обратно на gpu.

+0

Я задавался вопросом об этом. Делает совершенный смысл. Благодарю. – tschie

Смежные вопросы