Files
k-se-web/public/main.js
2025-03-31 17:36:17 +02:00

73 lines
1.9 KiB
JavaScript

let scene = new THREE.Scene();
let camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
camera.position.y = 2;
camera.position.z = 5;
camera.lookAt(new THREE.Vector3(0,0,0));
let renderer = new THREE.WebGLRenderer();
renderer.antialias = true;
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
let keyLight = new THREE.DirectionalLight(0xffffff, 0.3);
keyLight.position.set(-10, 10, 10);
scene.add(keyLight);
let fillLight = new THREE.DirectionalLight(0xffffff, 0.3);
fillLight.position.set(10, 10, 10);
scene.add(fillLight);
let fillLight2 = new THREE.DirectionalLight(0xffffff, 0.3);
fillLight2.position.set(-10, 10, 10);
scene.add(fillLight2);
let ambientLight = new THREE.AmbientLight(0xffffff, 0.4);
scene.add(ambientLight);
// A cheesy yellow
const defaultMaterial = new THREE.MeshStandardMaterial({ color: 0xffc539, roughness: 1.0, metalness: 0.0 });
var objLoader = new THREE.OBJLoader();
objLoader.setPath('models/');
objLoader.load('cheese.obj', function (object) {
object.name = "cheese";
scene.add(object);
object.position.y -= 0.75;
object.traverse(function (child) {
if (child instanceof THREE.Mesh) {
child.material = defaultMaterial
}
})
});
var animate = function (timestamp) {
let speed = 1.2;
let iTime = ((timestamp / 1000) * speed) % (Math.PI * 2);
requestAnimationFrame( animate );
let cheese = scene.getObjectByName("cheese");
if(cheese) {
cheese.rotation.y += 0.01;
}
camera.zoom = 1.5 + Math.sin(iTime) / 10;
camera.updateProjectionMatrix();
renderer.render(scene, camera);
};
animate(0);
window.addEventListener( 'resize', () => {
camera.aspect = window.innerWidth / window.innerHeight;
camera.updateProjectionMatrix();
renderer.setSize( window.innerWidth, window.innerHeight );
}, false );