Thanks, hard to cut the necessary parts, but for each Box I create a textureData Object:
function createBoxTexture() {
var canvasTexture = document.createElement("canvas");
// ... Creating one texture with top, side1 and side2 drawings to be mapped on the box accordingly
return {
texture: new CanvasTexture(canvasTexture),
top: [
new Vector2(0, 1),
new Vector2(itemLength / canvasWidth, 1 - itemWidth / canvasHeight),
],
side1: [
new Vector2(0, 1 - itemWidth / canvasHeight),
new Vector2(
itemLength / canvasWidth,
1 - (itemWidth + itemHeight) / canvasHeight
),
],
side2: !twoSides
? [
new Vector2(0, 1 - itemWidth / canvasHeight),
new Vector2(
itemLength / canvasWidth,
1 - (itemWidth + itemHeight) / canvasHeight
),
]
: [
new Vector2(0, 1 - (itemWidth + itemHeight) / canvasHeight),
new Vector2(
itemWidth / canvasWidth,
1 - (itemWidth + 2 * itemHeight) / canvasHeight
),
],
};
}
Then I create a BufferGeometry, turn it to NonIndexed and do this:
let geometry = new BoxBufferGeometry(2, 1, 2).toNonIndexed();
const uvAttribute = geometry.getAttribute("uv");
uvAttribute.setXY(0, texture_data.side2[1].x, texture_data.side2[0].y);
uvAttribute.setXY(1, texture_data.side2[0].x, texture_data.side2[0].y);
uvAttribute.setXY(2, texture_data.side2[1].x, texture_data.side2[1].y);
uvAttribute.setXY(3, texture_data.side2[0].x, texture_data.side2[0].y);
uvAttribute.setXY(4, texture_data.side2[0].x, texture_data.side2[1].y);
uvAttribute.setXY(5, texture_data.side2[1].x, texture_data.side2[1].y);
uvAttribute.setXY(6, texture_data.side2[0].x, texture_data.side2[1].y);
uvAttribute.setXY(7, texture_data.side2[1].x, texture_data.side2[1].y);
uvAttribute.setXY(8, texture_data.side2[0].x, texture_data.side2[0].y);
uvAttribute.setXY(9, texture_data.side2[1].x, texture_data.side2[1].y);
uvAttribute.setXY(10, texture_data.side2[1].x, texture_data.side2[0].y);
uvAttribute.setXY(11, texture_data.side2[0].x, texture_data.side2[0].y);
uvAttribute.setXY(12, texture_data.side1[1].x, texture_data.side1[1].y);
uvAttribute.setXY(13, texture_data.side1[1].x, texture_data.side1[0].y);
uvAttribute.setXY(14, texture_data.side1[0].x, texture_data.side1[1].y);
uvAttribute.setXY(15, texture_data.side1[1].x, texture_data.side1[0].y);
uvAttribute.setXY(16, texture_data.side1[0].x, texture_data.side1[0].y);
uvAttribute.setXY(17, texture_data.side1[0].x, texture_data.side1[1].y);
uvAttribute.setXY(18, texture_data.side1[0].x, texture_data.side1[0].y);
uvAttribute.setXY(19, texture_data.side1[0].x, texture_data.side1[1].y);
uvAttribute.setXY(20, texture_data.side1[1].x, texture_data.side1[0].y);
uvAttribute.setXY(21, texture_data.side1[0].x, texture_data.side1[1].y);
uvAttribute.setXY(22, texture_data.side1[1].x, texture_data.side1[1].y);
uvAttribute.setXY(23, texture_data.side1[1].x, texture_data.side1[0].y);
//... for the rest of the sides
Is it ok with you or do you want me to generate a small live example?
Thanks!