Боюсь, ваш кодекс полон ошибок.Кажется, вы пытаетесь перенести шейдер с шадертой на three.js
, верно?
Я удалил все ошибки здесь, но эффект все еще выглядит неработоспособным: https://codepen.io/anon/pen/XGRVew
В любом случае, вотнесколько вещей, которые нужно иметь в виду:
- Вы должны назначить текстуры униформе после , когда вы создали проход шейдера.Униформа клонируется для внутреннего материала
ShaderPass
.Это означает, что текстуры тоже клонированы.Соответствующий флаг needsUpdate
установлен неправильно, если вы загружаете текстуру перед созданием материала. - Как уже упоминалось @Marquizzo, ваша текстура заблокирована по соображениям безопасности.Я добавил несколько текстур из репозитория
three.js
для тестовых целей. Следующая строка кода не обязательна, поскольку в геометрии указаны координаты ультрафиолета.Нет необходимости вычислять их на лету, как это делает шадертой.Просто используйте переменную vUv
в фрагментном шейдере.
vec2 uv = gl_FragCoord.xy / resolution.xy;
Для таких простых однопроходных шейдеров нет необходимости использовать EffectComposer
.Попробуйте использовать подход, подобный этому официальному примеру .
- Вы всегда должны убедиться, что файлы примеров, такие как
ShaderPass
или EffectComposer
, соответствуют версии three.js
вваш код.Я изменил это в коде ручки, чтобы удалить все предупреждения об устаревании.