{
var scene,
camera,
renderer,
cubeMesh,
controls,
height = 380;
function createControls () {
controls = new Three.OrbitControls(camera, renderer.domElement);
}
function createCamera () {
const fov = 35;
const aspect = width / height;
const near = 0.1;
const far = 100;
camera = new Three.PerspectiveCamera( fov, aspect, near, far );
camera.position.set(-4, 4, 13);
}
function createGeometries () {
const top = new Three.BoxBufferGeometry( 4, 0.1, 4 );
const leg = new Three.CylinderBufferGeometry( 0.15, 0.10, 2.5, 4 )
return {
top,
leg
};
}
function createMaterials () {
const wood = new Three.MeshStandardMaterial({
map:loader.load('https://threejsfundamentals.org/threejs/lessons/resources/images/compressed-but-large-wood-texture.jpg')
});
return {
wood
};
}
function createLights () {
const ambientLight = new Three.HemisphereLight(
0xddeeff,
0x202020,
3,
);
const mainLight = new Three.DirectionalLight( 0xffffff, 5 );
mainLight.position.set( 10, 10, 10 );
scene.add( ambientLight, mainLight );
}
function createTable () {
const table = new Three.Group();
scene.add(table);
const geometries = createGeometries();
const materials = createMaterials();
const top = new Three.Mesh( geometries.top, materials.wood );
top.position.y = 1.3;
const leg1 = new Three.Mesh( geometries.leg, materials.wood );
leg1.position.set(1.7, 0, 1.7)
leg1.rotation.y = -Math.PI / 4;
const leg2 = leg1.clone();
leg2.position.set(-1.7, 0, 1.7);
const leg3 = leg1.clone();
leg3.position.set(-1.7, 0, -1.7)
const leg4 = leg1.clone();
leg4.position.set(1.7, 0, -1.7)
table.add(
top,
leg1,
leg2,
leg3,
leg4
)
}
function createRenderer () {
renderer = new Three.WebGLRenderer({
antialias: true
});
renderer.setSize(width, height);
renderer.setPixelRatio( window.devicePixelRatio );
renderer.gammaFactor = 2.2;
renderer.gammaOutput = true;
renderer.physicallyCorrectLights = true;
}
function update() {
}
function render() {
renderer.render(scene, camera);
}
function init () {
scene = new Three.Scene();
scene.background = new Three.Color( 'skyblue' );
createCamera();
createRenderer();
createControls();
createLights();
createTable();
renderer.setAnimationLoop(() => {
update();
render();
});
}
function onWindowResize() {
camera.setAnimationLoop = width / height;
camera.updateProjectionMatrix();
renderer.setSize(width, height);
}
init();
window.addEventListener('resize', onWindowResize);
yield renderer.domElement;
}