У меня есть игра Three JS, в которой в качестве игровых фигур используется набор кубиков. Одно лицо на каждом кубе несет пользовательское изображение, загруженное через указанный c JPG URL. Когда пользователь запускает новую игру, я хотел бы иметь возможность просто поменять изображение JPG, назначенное одному лицу каждого куба. Можно ли это как-то сделать? Или мне нужно полностью снести и перестроить каждый куб? Конечно, я бы хотел этого избежать, потому что мой поиск в сети привел меня к выводу, что правильно очистить сцену Three JS и ресурсы GPU, которые она обременяла, непросто (включая необходимость высвободить все ссылки на любая часть меня sh или его составных частей).
Этот код показывает, как я создаю кубы:
function makeCardCube(cardImageUrl, textureBackSide, locX, locY, locZ, width, height) {
let thickness = 0.01 * width;
let cubeGeometry = new THREE.BoxBufferGeometry(width, thickness, height);
let loader = new THREE.TextureLoader();
let materialArray = [
new THREE.MeshBasicMaterial( { map: loader.load('/images/cards/white-square-400x400.png') } ),
new THREE.MeshBasicMaterial( { map: loader.load('/images/cards/white-square-400x400.png') } ),
// Card face.
new THREE.MeshBasicMaterial( { map: loader.load(cardImageUrl) } ),
// Card back side.
new THREE.MeshBasicMaterial(
{
map: textureBackSide
}
),
new THREE.MeshBasicMaterial( { map: loader.load('/images/cards/white-square-400x400.png') } ),
new THREE.MeshBasicMaterial( { map: loader.load('/images/cards/white-square-400x400.png') } ),
];
cube = new THREE.Mesh( cubeGeometry, materialArray );
cube.position.set(locX, locY, locZ);
// Flip the card 90 degrees "up" around the X axis so the card faces the camera.
cube.rotateX(THREE.Math.degToRad(90));
return cube;
}