<script>
var objects=[];
var mouse, raycaster;
var intersects = [];
var legsMaterial, cushionsMaterial, backMaterial, supportsMaterial, baseMaterial;
var legs , cushions , back, supports, base;
var theModel;
var cameraFar = 5;
const BACKGROUND_COLOR = 0xf1f1f1;
const scene = new THREE.Scene();
scene.background = new THREE.Color(BACKGROUND_COLOR );
scene.fog = new THREE.Fog(BACKGROUND_COLOR, 20, 100);
camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = cameraFar;
camera.position.x = 0;
//render
renderer = new THREE.WebGLRenderer({ antialias: true, });
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.shadowMap.enabled = true;
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
renderer.setPixelRatio(window.devicePixelRatio);
document.body.appendChild(renderer.domElement);
//controls
var canvas = renderer.domElement;
document.body.appendChild(canvas);
const controls = new THREE.OrbitControls(camera, canvas);
controls.minDistance = 3;
controls.maxDistance = 5;
//window.addEventListener('resize', onWindowResize);
// Add lights
var hemiLight = new THREE.HemisphereLight( 0xffffff, 0xffffff, 0.61 );
hemiLight.position.set( 0, 50, 0 );
// Add hemisphere light to scene
scene.add( hemiLight );
var dirLight = new THREE.DirectionalLight( 0xffffff, 0.54 );
dirLight.position.set( -8, 12, 8 );
dirLight.castShadow = true;
dirLight.shadow.mapSize = new THREE.Vector2(1024, 1024);
// Add directional Light to scene
scene.add( dirLight );
// Floor
var floorGeometry = new THREE.PlaneGeometry(5000, 5000, 1, 1);
var floorMaterial = new THREE.MeshPhongMaterial({color: 0xeeeeee, shininess: 0});
var floor = new THREE.Mesh(floorGeometry, floorMaterial);
floor.rotation.x = -0.5 * Math.PI;
floor.receiveShadow = true;
floor.position.y = -1;
scene.add(floor);
function init1(){
var loader = new THREE.GLTFLoader();
loader.load('assets/chair.glb', function(gltf) {
theModel=gltf.scene;
theModel.scale.set(1,1,1);
theModel.rotation.y = Math.PI/4;
theModel.position.y = -1;
scene.add( theModel );
//console.log(theModel);
var t = theModel.children[0];
theModel.traverse(function (child) {
if (child instanceof THREE.Mesh) {
//console.log(child);
intersects.push(child)
legsMaterial = new THREE.MeshPhysicalMaterial( {color: 0xff0000} );
cushionsMaterial = new THREE.MeshStandardMaterial({color: 0xffffff} );
backMaterial = new THREE.MeshPhysicalMaterial( { color: 0xffffff} );
supportsMaterial = new THREE.MeshPhysicalMaterial( {color: 0xffffff} );
baseMaterial = new THREE.MeshPhysicalMaterial( {color: 0xffffff} );
objects=[
theModel.getObjectByName( "legs", true ).material=legsMaterial,
theModel.getObjectByName( "cushions", true ).material=cushionsMaterial,
theModel.getObjectByName( "back", true ).material=backMaterial,
theModel.getObjectByName( "supports", true ).material=supportsMaterial,
theModel.getObjectByName( "base", true ).material=baseMaterial,]
}
});
//scene.add(theModel);
});
var selected = legs;
var guiControls = new function() {
this.color = "#ffae23";
};
var gui = new dat.GUI();
gui.addColor(guiControls, "color")
.listen()
function onChange(e) {
selected.material.color.setStyle(e);
}
var raycaster, mouse = { x : 0, y : 0 };
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
renderer.domElement.addEventListener("click", onClick,false);
function onClick(event) {
mouse.x = event.clientX / window.innerWidth * 2 - 1;
mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
intersects = raycaster.intersectObjects(objects);
console.log(intersects);
if (intersects.length > 0) {
selected = intersects[0].object;
guiControls.color = selected.material.color.getStyle();
}
}
}
function animate() {
renderer.render(scene, camera);
requestAnimationFrame(animate);
if (resizeRendererToDisplaySize(renderer)) {
const canvas = renderer.domElement;
camera.aspect = canvas.clientWidth / canvas.clientHeight;
camera.updateProjectionMatrix();
}
}
animate();
// Function - New resizing method
function resizeRendererToDisplaySize(renderer) {
const canvas = renderer.domElement;
var width = window.innerWidth;
var height = window.innerHeight;
var canvasPixelWidth = canvas.width / window.devicePixelRatio;
var canvasPixelHeight = canvas.height / window.devicePixelRatio;
const needResize = canvasPixelWidth !== width || canvasPixelHeight !== height;
if (needResize) {
renderer.setSize(width, height, false);
}
return needResize;
}
init1();