LeCodesdocs

Texture

GPU-текстура для 3D-материалов, декодируемая нативно 3D-движком. Не взаимозаменяема с Texture2D — та питает 2D-движок спрайтов; эта питает юниформы Material. Грузи одно и то же изображение в оба типа, если проект использует его в обоих мирах.

Обзор

TypeScript
const tex = await Texture.load(asset('./crate.jpg'))
const crate = Mesh.box({ material: Material.lit({ map: tex }) })
scene.add(crate)

Загрузка

TypeScript
Texture.load(source: string | FetchResponse | File): Promise<Texture>

Принимает URL-строку (ассет/удалённый), уже скачанный FetchResponse или File (напр. из openFilePicker). Загрузки по URL отклоняются при HTTP-ошибках (статус ≥ 400) и ошибке декодирования.

TypeScript
Texture.fromCanvas(canvas: Canvas): Texture

Запекает поверхность Canvas в текстуру — синхронно, без декодирования. Текстура кэшируется на канвасе, поэтому повторные вызовы (или несколько материалов) делят одну GPU-текстуру, а canvas.update() перезаливает её. Сам ты это зовёшь редко: присвоение Canvas в material.map делает это за тебя.

Свойства

TypeScript
tex.width, tex.height     // пиксельные размеры (только чтение)
tex.wrapS = 1             // режим wrap по горизонтали (U)
tex.wrapT = 1             // режим wrap по вертикали (V)

wrapS / wrapT применяются при присвоении текстуры юниформу материала — задавай их до material.set('baseColorMap', tex).

Note

у Texture нет dispose() — загруженную текстуру нельзя освободить явно, она живёт до разбора 3D-движка. Грузи большие текстуры один раз и переиспользуй.

Видео-текстуры

Текстуру нельзя создать из видеофайла напрямую — проигрывай его VideoPlayer и сэмпли его текстуру:

TypeScript
const player = new VideoPlayer(asset('./clip.mp4'))
const screen = Mesh.plane({ material: Material.video(player.texture) })

player.texture сообщает width/height равными 0 (размер видео неизвестен в момент создания текстуры). См. Медиа и Material.video.

Подводные камни

TypeScript
// ✗ скармливать 3D Texture в Sprite (или Texture2D в Material)
new Sprite({ texture: await Texture.load(url) })       // не тот движок — используй Texture2D.load
// ✓ каждый движок грузит свой тип
new Sprite({ texture: await Texture2D.load(url) })

Смотрите также

  • Material — где текстуры потребляются (map, юниформы).
  • Texture2D — аналог для 2D-движка.
  • МедиаVideoPlayer.texture.
  • Canvas — рисованные поверхности как текстуры.