Threejs - можете ли вы использовать CircleBufferGeometry с материалом Points?

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

документация для точек threejs говорит, что она принимает геометрию или геометрию буфера, но я также заметил существует circleBufferGeometry. Могу ли я использовать это? Или есть другой способ сделать точки круглыми, кроме использования спрайтов? Я не уверен, но похоже, что загружается изображение для каждая частица вызвала бы много ненужных накладных расходов.

Итак, вкратце, есть ли более производительный или простой способ сделать систему частиц из круглых частиц (сфер или дисков) в тройках без спрайтов?


person mheavers    schedule 14.09.2017    source источник
comment
Хммм, я думаю, что принятый ответ не отвечает на вопрос должным образом, или, может быть, некоторые детали следует убрать / добавить из вопроса. Вы специально просите использовать circleBufferGeometry в качестве формы частицы. Это может быть неочевидно, но сначала вы спрашиваете о точках и геометрии, необходимой для распределения, а затем спрашиваете формы частиц (снова упоминая геометрию). Ясно, что вы путаете эти два понятия. Так вроде два вопроса:   -  person pailhead    schedule 28.09.2017
comment
Как я могу сделать частицы, которые кажутся круглыми (форма)? Как я могу использовать circleBufferGeometry в качестве формы для системы частиц? С принятым ответом вы, возможно, технически все еще используете спрайты или, по крайней мере, рекламные щиты. Прямо сейчас это выглядит для меня Как я могу сделать A Do B, который выглядит как A Ok :(   -  person pailhead    schedule 28.09.2017


Ответы (2)


Если вы хотите нарисовать каждую "точку"/"частицу" в виде геометрического круга, вы можете использовать THREE.InstancedBufferGeometry или взглянуть на это

person pailhead    schedule 15.09.2017

Геометрия объекта Points определяет расположение точек в трехмерном пространстве. Он не определяет форму точек. Точки также рисуются в виде четырехугольников, поэтому они всегда будут квадратными, хотя они не обязательно должны выглядеть так.

Ваш первый вариант - (как вы указали) загрузить текстуру для каждой точки. Я действительно не понимаю, как это приведет к «большим» накладным расходам, потому что текстура будет загружена только один раз и будет применена ко всем точкам. Но, я уверен, у вас есть свои причины.

Другой вариант — создать свой собственный шейдер для рисования точки в виде круга. Этот метод принимает точку как квадрат и отбрасывает любые фрагменты (несколько фрагментов составляют пиксель) за пределами круга.

person TheJim01    schedule 14.09.2017
comment
Спасибо TheJim01 за ваш ценный ответ. На самом деле я прошел через ссылку в прошлом, но оставил ее неиспользованной, потому что это похоже на использование SpriteMaterial в three.js (т.е. без чувства ориентации). По крайней мере, при использовании SpriteMaterial все диски обращены к камере, но я думаю, что могу попробовать с шейдером и попытаться повернуть точки. - person Asif Ali; 04.03.2020
comment
Один запрос (если можно), не могли бы вы подсказать, как подключить значения вращения (которые преобразуются в матрицу вращения) в шейдер? Тем временем я реализовал это связать с InstancedMesh, но это просто позволяет избежать неизбежного. - person Asif Ali; 04.03.2020
comment
@AsifAli Я рекомендую создать новый вопрос. Таким образом, каждый может ответить, и каждый может извлечь выгоду из обмена. - person TheJim01; 05.03.2020
comment
спасибо за предложения, я создам новый вопрос и отмечу вас. - person Asif Ali; 07.03.2020