2014-09-04 2 views
1

Обновлено:Маркировочные частицы в ParticleSystem/PointCloud в Three.js

У меня один миллион 2D кругов, охватывающих X, Y осей с их Z значения, как 0 (например, диаграммы рассеяния). Я использую программы шейдеров THREE.PointCloud и WebGL в надежде на повышение производительности (похоже, работает). Они сделаны с использованием 256x256px PNG-изображений шара (хотя при масштабировании точки никогда не достигают 256x256px?). Я также использую raycasting, чтобы навести курсор мыши и нажимать на круги (которые имеют разные цвета и размеры).

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

Я попытался создать объект 2D THREE.TextGeometry для каждой точки и добавить их в Object3D и добавить его в сцену. Ожидается, что производительность будет плохой, но все остальное отлично.

В настоящее время я создаю текстуру 2D-холста для метки каждой точки, добавляя текстуры к объекту, а затем добавляя это к сцене (кажется, что это быстро, но размер шрифта, пикселизация и координаты дают мне головная боль).

Хотелось бы подумать, что есть 2D-плоскость, в которой я могу добавить много текстовых меток, которые не будут пикселироваться при масштабировании по оси Z. THREE.PlaneGeometry звучит неплохо, но у меня возникла ошибка при попытке добавить к ней объект.

Другой вариант - показывать только метки для видимых точек. Я понимаю, что PointCloud считается единственным объектом, поэтому FrustrumCulling не применяется к отдельным точкам. Поэтому я должен был бы реализовать свое собственное обнаружение отбраковки. Если бы я это сделал, я мог бы пойти по пути использования HTML-элементов для ярлыков или даже подхода TextGeometry.

Старый вопрос:

Кто-нибудь имел какие-либо успеха маркировки точек/частиц в three.js?

Идеально непиксельная текстовая метка, способная масштабироваться и вращаться с помощью pointcloud.

Что касается пикселизации, я думаю об использовании TextGeometry() для создания двумерной текстовой метки. Затем добавьте метки к объекту, а затем к сцене, используя те же координаты, что и точки.

Но если в случае с 1 миллионом пунктов, добавление отдельного объекта в 1 миллион текстовых меток будет слишком много?

+0

Ваш вопрос немного плох для SO, так как «Да, у меня есть». будет технически правильным ответом. Геометрия = до свидания производительность (и они не будут легко смотреть на камеру). CSS спрайты могут быть возможным решением для вас, хотя они будут перекрывать сцену, а не интегрироваться с ними. Я использую Sprites, но один миллион из них ... не будет происходить (не поместится на экране, и вы скоро будете из памяти текстур). Пожалуйста, будьте более конкретными в своем вопросе. – Leeft

+0

Извините, я обновлю свой вопрос. – dps27a

ответ

1

После некоторого исследования кажется, что шрифты с полем на дальнем расстоянии визуально отображают текст без пикселизации и могут быть достигнуты с помощью шейдеров WebGL - так что разгрузка рабочей нагрузки на GPU, которая должна быть отличной для маркировки миллиона частиц.

+3

можете ли вы поделиться своим опытом, как вы его достигаете? Iam сталкивается с той же проблемой. [link] (http://stackoverflow.com/questions/27376252/100000-city-names-using-single-three-pointcloud) – user2089677

+0

Мне также интересно узнать, как вы решили это. – huertanix

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