Создайте CompressedTexture в Three.js из короткого или байтового массива.

Я работаю с TypeScript и Three.js и пытаюсь загрузить сжатую текстуру вручную. Данные текстуры имеют формат DXT1, поэтому я храню их в Uint16Array. До сих пор я пытаюсь создать CompressedTexture из Uint16Array, чтобы его можно было разделить на Uint8Array с двойным размером, как я это сделал в приведенном ниже фрагменте.

Я пробовал различные комбинации форматов текстур, ширины и высоты, а также способы обмануть ImageData, которые, по-видимому, нужны CompressedTexture в качестве входных данных для MIP-карт. Но пока я просто не получаю никаких результатов.

Примерно так я пытаюсь создать текстуру:

      const w = this._width / 2; // divide by 2 instead of 4, to account for not using 64 bit pixels but 32 bit
const h = this._height / 4;

// 'data' has (4 * w * h) bytes
const data: Uint8ClampedArray = this.getData();
        
const mip0: ImageData = new ImageData(data, w, h);
const texture: CompressedTexture = new CompressedTexture([mip0], this._width, this._height, RGB_S3TC_DXT1_Format);
texture.needsUpdate = true;

Это самое близкое к тому, чтобы заставить его работать и не жаловаться, но он все равно не работает. я получаюGL_INVALID_VALUE: Invalid compressed image sizeпредупреждение во время выполнения, когда текстура используется в обычном режимеMeshBasicMaterial. Я попробовал загрузить текстуру DDS с помощью DDSLoader, и это работает нормально.

0 ответов

Другие вопросы по тегам