Очень простая реализация отображения проекции, выполненная в React с использованием шейдеров glsl, работает на любом типе поверхности, а также движется или вращается!
Вы можете проверить это в следующей песочнице -› https://codesandbox.io/s/czxbw
Краткий обзор сцены, созданной в React:
Всего несколькими строками кода я создаю сцену для нашего проекта как компонент React:
Сначала я импортирую необходимые библиотеки, CameraHelper из threejs, чтобы мы могли показать некоторые штуковины на камере, которую мы используем для проецирования текстуры.
React-three-fiber и drei импортированы, чтобы облегчить нашу жизнь, так как они предоставляют компоненты из библиотеки three js наилучшим образом подготовленными для React.
Взгляните на весь код, и я объясню в разделе кода каждую часть.
Строки 11 и 21 — это определения двух красивых сфер, которые я текстурирую текстурой земли и неба (чтобы сцена не была пустой :) )
Настоящая магия происходит в строке 31 и далее, когда я использую компонент, который я создал ниже, расширяя класс shaperMaterial, я привожу код ниже.
Здесь важно отметить, что нам нужна камера и ее координаты, поэтому я определяю объект камеры в строке 55 и обновляю координаты в дескрипторе useFrame. Затем эта информация передается компоненту ProjectedMaterial, вызываемому в строке 58.
Нам также нужна простая текстура и цвет для основы меша для областей, на которые не делается проекция, и они определены в строках 35 и 37 соответственно.
Простой шейдер, чтобы управлять ими всеми
Класс shaperMaterial является шлюзом для любой реализации шейдера в Three js, вы можете довольно легко указать все компоненты, которые вы используете в своем шейдере, в качестве юниформ в конструкторе, а затем предоставить фрагмент и вершинный шейдер.
Здесь мы получаем координаты с камеры и меняем uv-координаты нашей текстуры в соответствии с координатами на каждом кадре.
Я надеюсь, что это было полезно для вас, пожалуйста, оставьте комментарии, если вам нужна дополнительная информация!