Создайте 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, и это работает нормально.