im trying to load an image on a mesh in ionic angular using three.js very new to this and i cant get it to work at all
const scene = new THREE.Scene();
scene.background = new THREE.Color(0xffffff);
const camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 0.1, 1000);
camera.position.set(0, 2, 3);
const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true;
const dirLight = new THREE.DirectionalLight(0xffffff, 1);
dirLight.position.set(5, 10, 7.5);
scene.add(dirLight, new THREE.AmbientLight(0xffffff, 0.5));
const designCanvas = document.createElement('canvas');
designCanvas.width = 1024;
designCanvas.height = 1024;
const ctx = designCanvas.getContext('2d')!;
ctx.fillStyle = '#ffffff';
ctx.fillRect(0, 0, 1024, 1024);
const designTexture = new THREE.CanvasTexture(designCanvas);
designTexture.flipY = false;
const loader = new GLTFLoader();
loader.load('assets/models/t_shirt.glb', (gltf) => {
const model = gltf.scene;
scene.add(model);
model.traverse((child) => {
if ((child as THREE.Mesh).isMesh) {
const mesh = child as THREE.Mesh;
console.log('UVs:', mesh.geometry.getAttribute('uv'));
const materials: THREE.Material[] = Array.isArray(mesh.material) ? ([] as THREE.Material[]).concat(...mesh.material) : [mesh.material];
materials.forEach((mat) => {
const standardMat = mat as THREE.MeshStandardMaterial;
standardMat.map = designTexture;
standardMat.color.set('#ffffff');
standardMat.needsUpdate = true;
});
}
});
const img = new Image();
img.src = 'assets/textures/toji.jpg';
img.onload = () => {
ctx.drawImage(img, 0, 0, designCanvas.width, designCanvas.height);
designTexture.needsUpdate = true;
};
}, undefined, (err) => console.error(err));
function animate() {
requestAnimationFrame(animate);
controls.update();
renderer.render(scene, camera);
}
animate();