I’m using Vaadin Flow version 24.7 and Three.js version 0.176.0. I used template for Vaadin Flow with Three.js from this source: GitHub - Artur-/threejs-vaadin: Simple example of using three.js and Vaadin 14. I wanted to import a Blender .obj file with the Three.js OBJLoader. When I try to do this Vaadin overwrites my .obj file with auto-generated HTML code. I’ve different locations for the file. I’ve tried to set
vaadin.exclude-urls=/folder_name/**
and more I don’t remember anymore but nothing works.
JS file for Three.js
import { OBJLoader } from 'three/addons/loaders/OBJLoader.js';
class ThreejsTest {
init(element) {
this.element = element;
this.camera = new THREE.PerspectiveCamera(
70,
window.innerWidth / window.innerHeight,
0.01,
10
);
this.camera.position.z = 1;
this.scene = new THREE.Scene();
// this.geometry = new THREE.BoxGeometry(0.2, 0.2, 0.2);
// this.material = new THREE.MeshNormalMaterial();
// this.mesh = new THREE.Mesh(this.geometry, this.material);
// this.scene.add(this.mesh);
// this.renderer = new THREE.WebGLRenderer({
// antialias: true,
// canvas: element
// });
// // Use a random spinning direction
// this.xIncrement = (Math.random() - 0.5) / 10;
// this.yIncrement = (Math.random() - 0.5) / 10;
this.material = new THREE.MeshNormalMaterial();
const objLoader = new OBJLoader();
objLoader.load("6SidedDice.obj", (object) => {
object.traverse( (child) => {
if ( child instanceof THREE.Mesh ) {
child.material = this.material;
}
});
let bbox = new THREE.Box3().setFromObject(object);
const center = new THREE.Vector3();
bbox.getCenter(center);
let bsphere = bbox.getBoundingSphere(new THREE.Sphere(center));
let m = new THREE.MeshStandardMaterial({
color: 0xffffff,
opacity: 0.3,
transparent: true
});
var geometry = new THREE.SphereGeometry(bsphere.radius, 32, 32);
let sMesh = new THREE.Mesh(geometry, m);
this.scene.add(sMesh);
const box = new THREE.Box3().setFromObject(root);
const boxSize = box.getSize(new THREE.Vector3()).length();
const boxCenter = box.getCenter(new THREE.Vector3());
console.log(boxSize);
console.log(boxCenter);
});
//objLoader.setMaterials(this.material);
this.renderer = new THREE.WebGLRenderer({
antialias: true,
canvas: element
});
}
render() {
this.renderer.render(this.scene, this.camera);
}
animate() {
requestAnimationFrame(this.animate.bind(this));
this.render();
}
}
window.initThree = function(element) {
const threejsTest = new ThreejsTest();
threejsTest.init(element);
threejsTest.animate();
}