Texture
GPU-текстура для 3D-материалов, декодируемая нативно 3D-движком. Не взаимозаменяема с
Texture2D — та питает 2D-движок спрайтов; эта питает юниформы
Material. Грузи одно и то же изображение в оба типа, если проект использует
его в обоих мирах.
Обзор
const tex = await Texture.load(asset('./crate.jpg'))
const crate = Mesh.box({ material: Material.lit({ map: tex }) })
scene.add(crate)Загрузка
Texture.load(source: string | FetchResponse | File): Promise<Texture>Принимает URL-строку (ассет/удалённый), уже скачанный FetchResponse или File (напр. из
openFilePicker). Загрузки по URL отклоняются при HTTP-ошибках (статус ≥ 400) и ошибке декодирования.
Texture.fromCanvas(canvas: Canvas): TextureЗапекает поверхность Canvas в текстуру — синхронно, без декодирования.
Текстура кэшируется на канвасе, поэтому повторные вызовы (или несколько материалов) делят одну
GPU-текстуру, а canvas.update() перезаливает её. Сам ты это зовёшь редко: присвоение Canvas в
material.map делает это за тебя.
Свойства
tex.width, tex.height // пиксельные размеры (только чтение)
tex.wrapS = 1 // режим wrap по горизонтали (U)
tex.wrapT = 1 // режим wrap по вертикали (V)wrapS / wrapT применяются при присвоении текстуры юниформу материала — задавай их до
material.set('baseColorMap', tex).
у Texture нет dispose() — загруженную текстуру нельзя освободить явно, она живёт до разбора
3D-движка. Грузи большие текстуры один раз и переиспользуй.
Видео-текстуры
Текстуру нельзя создать из видеофайла напрямую — проигрывай его VideoPlayer и сэмпли его текстуру:
const player = new VideoPlayer(asset('./clip.mp4'))
const screen = Mesh.plane({ material: Material.video(player.texture) })player.texture сообщает width/height равными 0 (размер видео неизвестен в момент создания
текстуры). См. Медиа и Material.video.
Подводные камни
// ✗ скармливать 3D Texture в Sprite (или Texture2D в Material)
new Sprite({ texture: await Texture.load(url) }) // не тот движок — используй Texture2D.load
// ✓ каждый движок грузит свой тип
new Sprite({ texture: await Texture2D.load(url) })