Как размер используется в THREE.PointCloudMaterial?

Я пытаюсь понять, как атрибут «размер» в THREE.PointCloudMaterial преобразуется в размер точек на экране.

При орфографической камере, установленной на (-1,1,1-1) и размере = 1, точки не заполняют половину экрана, поэтому, по-видимому, этот параметр не относится к пространству камеры. Это также не относится к пикселям; при «size = 1» точки >> 1 пиксель.

Кроме того, если я изменяю размер окна браузера, изменяя его высоту, точки масштабируются по размеру, а если я изменяю ширину окна, точки не масштабируются по размеру (!?!)

Будем очень благодарны за любые разъяснения о том, как «размер» переводится на экран или в пространство камеры.

Если интересно, зачем мне это знать: я пытаюсь наложить PointCloud с помощью THREE.PointCloudMaterial (с которым я могу использовать текстурную карту) поверх второго PointCloud, использующего ShaderMaterial (куда я могу отправить размер параметр прямо в gl_PointSize и точно знать, насколько большой будет каждая точка). У меня возникли проблемы с сопоставлением размеров точек в двух облаках.

Спасибо! -Майк


person Mike Cantor    schedule 08.08.2014    source источник
comment
Трудно помочь вам, не зная точно, что вы делаете. Можете ли вы предоставить исходный код и, желательно, простой живой пример, чтобы проблема воспроизводилась?   -  person WestLangley    schedule 09.08.2014


Ответы (1)


Здесь код начинается со строки 368.

Он использует gl_PointSize для растеризации вершины. Присутствуют два варианта, один с затуханием, другой без. Без этого точка растрируется до фиксированного размера в пикселях. При этом размер делится на глубину и создает эффект перспективы. Это происходит в вершинном шейдере.

Глядя на код, кажется, что размер будет выражен в мировых единицах в случае затухания и в фиксированном размере пикселя, если нет.

person pailhead    schedule 10.08.2014