У меня есть значения в теккетах DataTexture, к которым я пытаюсь получить доступ, используя индексы в моем шейдере. Индексы [0, 1, 2, 3, 4, 5, 6... 62, 63]
являются непрерывными, в то время как текстура данных имеет высоту и ширину (uTextureDimension
) из 8. После некоторых исследований я написал эту функцию, чтобы принять конкретное значение индекса, а также ссылки на соответствующий текселе:Ссылка на тексели в текстуре данных с использованием индексов в шейдере
vec2 customUV = vec2(mod(aIndex, uTextureDimension)/uTextureDimension, floor(aIndex/uTextureDimension)/uTextureDimension);
vec4 texelValues = texture2D(tDataTexture, customUV).xyzw;
Я также попробовал эту версию для ссылки на тексель из его центральной точки. Также нет кости:
vec2 perMotifUV = vec2(mod(aIndex, uTextureDimension) * ((1.0/uTextureDimension)/2.0), floor(aIndex/uTextureDimension) * ((1.0/uTextureDimension)/2.0));
vec4 texelValues = texture2D(tDataTexture, customUV).xyzw;
После работы с этим со вчерашнего дня, редактирования здесь и там, и оглядывая другие решения, я до сих пор не получаю ожидаемые результаты. Я должен сказать, что при использовании Three.js шейдеры настроены на высокую точность float - это часть проблемы? Может ли кто-нибудь подтолкнуть меня сюда? Благодаря!
В последующей деятельности следует этот подход для работы DataTextures где высота и ширина различны. Я предполагаю, что у вас есть два размера текстуры и два соответствующих размера текселя. – gromiczek