// Задача: конструирайте ... зарче, от дупките // на което струи светлина var renderer = new THREE.WebGLRenderer(); renderer.setSize( window.innerWidth, window.innerHeight ); renderer.setAnimationLoop( drawFrame ); renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap; document.body.appendChild( renderer.domElement ); var scene = new THREE.Scene(); var aspect = window.innerWidth/window.innerHeight; camera = new THREE.PerspectiveCamera( 30, aspect ); camera.position.set( 0, 10, 30 ); camera.lookAt( new THREE.Vector3( 0, -2, 0 ) ); // Основно тяло на зарчето - куб 4х4х4, който ще // трябва да решите как да продупчите var die = new THREE.Mesh( new THREE.BoxGeometry( 4, 4, 4 ), new THREE.MeshLambertMaterial() ); die.castShadow = true; var hole = new THREE.Mesh(new THREE.BoxGeometry(3.8, 3.8, 3.8)); var cylinder = new THREE.Mesh(new THREE.CylinderGeometry(0.9, 0.9, 4, 32)); var cylinder2 = new THREE.Mesh(new THREE.CylinderGeometry(0.9, 0.9, 4, 32)); cylinder2.rotation.x = Math.PI / 2; var cylinder3 = new THREE.Mesh(new THREE.CylinderGeometry(0.9, 0.9, 4, 32)); cylinder3.rotation.z = Math.PI / 2; var csg = new CSG(); csg.subtract([die, hole, cylinder, cylinder2, cylinder3]); die = csg.toMesh(); die.castShadow = true; scene.add( die ); // широка платформа, която ще бъде осветявана var geometry = new THREE.BoxGeometry( 100, 1, 100) var material = new THREE.MeshPhongMaterial(); platform = new THREE.Mesh( geometry, material ); platform.position.set( 0, -5, 0 ); platform.receiveShadow = true; scene.add( platform ); // светлина вътре в куба, свети надолу през // дупките на зарчето - ама трябва вие да си // я сложите на подходящо място light1 = new THREE.SpotLight( 'white' ); light1.position.set(0, 0, 0); light1.target = platform; light1.penumbra = 1; light1.castShadow = true; scene.add(light1); // втора слаба светлина, която прави жълтото // петно на платформата light2 = new THREE.SpotLight( 'yellow', 0.5 ); // интензитет 0.5 light2.position.set( 0, 0.1, 0 ); light2.angle = 1.3; light2.penumbra = 1; scene.add( light2 ); // трета светлина - отгоре много слаба бяла, // а отдолу по-силна керемидена - нужна ни е, // за да видим външните стени на зарчето light3 = new THREE.HemisphereLight( 0x202020, 0xA04040 ); scene.add( light3 ); function drawFrame() { // въртим зарчето die.rotation.x += 0.005; die.rotation.y += 0.004; die.rotation.z += 0.003; renderer.render( scene, camera ); }