// Задача: изградете селище с различни по размер // къщи, ориентирани в една от две перпендикулярни // посоки, като добавете и мъгла, така че да са // замъглени най-отдалечените къщи var renderer = new THREE.WebGLRenderer( {antialias: true} ); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( drawFrame ); document.body.appendChild( renderer.domElement ); var scene = new THREE.Scene(); scene.background = new THREE.Color( 'tan' ); var aspect = window.innerWidth/window.innerHeight; var camera = new THREE.PerspectiveCamera( 30, aspect ); camera.position.set( 0, 15, 100 ); camera.lookAt( new THREE.Vector3() ); const N = 200; const MAXX = 120; const MAXZ = 120; const MINSCALE = 0.5; const MAXSCALE = 2.0; function randBetween(a, b) { return Math.random() * (b - a) + a; } scene.fog = new THREE.FogExp2('tan', 0.008); // профил на къща var shape = new THREE.Shape(); shape.moveTo( 2, 0 ); shape.lineTo( 2, 4 ); shape.lineTo( 2.5, 4 ); shape.lineTo( 0, 6 ); shape.lineTo(-2.5, 4 ); shape.lineTo( -2, 4 ); shape.lineTo( -2, 0 ); shape.lineTo( 2, 0 ); // създаване на къщата като изтòчен обект var extrudeSettings = { depth: 6, bevelEnabled: true, bevelSegments: 2, steps: 2, bevelSize: 0.1, bevelThickness: 0.1 }; var geometry = new THREE.ExtrudeGeometry( shape, extrudeSettings ); // къща var house = new THREE.Mesh( geometry, new THREE.MeshPhongMaterial() ); for (var i = 0; i < N; i++) { house.rotation.y = (Math.random() > 0.5) ? 0 : Math.PI / 2; house.position.x = randBetween(-MAXX, MAXX); house.position.z = randBetween(-MAXZ, MAXZ); house.scale.set(randBetween(MINSCALE, MAXSCALE), randBetween(MINSCALE, MAXSCALE), randBetween(MINSCALE, MAXSCALE)) scene.add( house.clone() ); } // светлини light1 = new THREE.PointLight( 'orange', 0.5 ); light1.position.set( 20, 40, 0 ); scene.add( light1 ); light3 = new THREE.PointLight( 'red', 0.5 ); light3.position.set( -20, 40, 0 ); scene.add( light3 ); light2 = new THREE.PointLight(); light2.position.set( 0, -50, 100 ); scene.add( light2 ); function drawFrame() { scene.rotation.y += 0.003; renderer.render( scene, camera ); }