В моей сцене ThreeJS WebGLRenderer
я в настоящее время обрезаю пиксели фрагментным (пиксельным) шейдером GLSL в соответствии с их расстоянием от нижнего левого угла экрана:
if (distance(vec2(gl_FragCoord.x, gl_FragCoord.y), vec2(0.0, 0.0)) > 42.0)
discard;
Этот шейдер используется с экземпляром ThreeJS.ShaderMaterial
, который в конечном итоге используется с сеткой PointCloud
, которая завершает систему частиц в сцене.
Мой вопрос: как определить «размер окна» для этого шейдера? Я рад передать эти размеры пикселей из ThreeJS в шейдер, но не знаю, как лучше всего сопоставить геометрию и сетку ThreeJS с размером окна GLSL. Переход в window.innerWidth
и window.innerHeight
не работает.
Цель состоит в том, чтобы обрезать фрагменты, которые находятся рядом с центром физического экрана:
if (distance(vec2(gl_FragCoord.x, gl_FragCoord.y), vec2(pixelWidth * 0.5, pixelHeight * 0.5)) > 42.0)
discard;
Как мне найти pixelWidth
и pixelHeight
на стороне ThreeJS?
attribute
не подходит для фрагментного шейдера. Нечто, определяемое какattribute
, является атрибутом вершины. Во фрагментном шейдере эквивалентом атрибута для каждой вершины являетсяvarying
. Но я не думаю, что вы этого хотите - вам придется писать этот атрибут один раз для каждой вершины.uniform
, вероятно, то, что вы хотите. - person Andon M. Coleman   schedule 17.02.2015