diff options
| Commit | 185f5c35d163bd4a334ed4b2eee1bcb4f7882f67 (patch) | |
|---|---|---|
| Author | 2022-11-03 12:21:27 +0200 | |
| Committer | 2022-11-03 12:21:27 +0200 | |
| Files | d5b95fcdbba09092d72a3e8cd5d2e0c159ce24e5 | |
| uni-projects-185f5c35d163bd4a334ed4b2eee1bcb4f7882f67.tar uni-projects-185f5c35d163bd4a334ed4b2eee1bcb4f7882f67.tar.gz uni-projects-185f5c35d163bd4a334ed4b2eee1bcb4f7882f67.zip | ||
| Parent | 6c27855a224d23e66be717518280b1cb4fab1514 (diff) | |
[OKG/P05] Finished Ex 04 and did exercises 05 and 06
3 files changed, 174 insertions, 1 deletions
diff --git a/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/04.js b/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/04.js index f06ceb1..b41e1a8 100644 --- a/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/04.js +++ b/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/04.js @@ -20,12 +20,15 @@ var circle = new THREE.Mesh(new THREE.CylinderGeometry( 20, 20, 1/2, 80 ), mater var cone1 = new THREE.Mesh(new THREE.CylinderGeometry(0.1, 10, 10, 64, 16), material); cone1.rotation.z = Math.PI / 2; +cone1.position.y = -2; var cone2 = new THREE.Mesh(new THREE.CylinderGeometry(0.1, 10, 10, 64, 16), material); cone2.position.x = -10; -cone2.rotation.z = Math.PI / 2; +cone2.position.y = -2; +cone2.rotation.z = -Math.PI / 2; var csg = new CSG(); csg.union([cone1, cone2]); +csg.intersect([circle]); var hype = csg.toMesh(); hype.material = material; diff --git a/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/05.js b/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/05.js new file mode 100644 index 0000000..d732bab --- /dev/null +++ b/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/05.js @@ -0,0 +1,85 @@ +// Задача: конструирайте ... зарче, от дупките +// на което струи светлина + + +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 ); +} diff --git a/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/06.js b/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/06.js new file mode 100644 index 0000000..9bbbcb0 --- /dev/null +++ b/Year 2/Computer Graphics Fundamentals/05-Practice-31.10.2022/06.js @@ -0,0 +1,85 @@ +// Задача: конструирайте ... мистериозния обект +// с трите различни профила + +var renderer = new THREE.WebGLRenderer(); +renderer.setSize( window.innerWidth, window.innerHeight ); +renderer.setAnimationLoop( drawFrame ); +document.body.appendChild( renderer.domElement ); + +var scene = new THREE.Scene(); +scene.background = new THREE.Color( 'lightgray' ); + +var aspect = window.innerWidth/window.innerHeight; +camera = new THREE.PerspectiveCamera( 30, aspect ); +camera.position.set( 0, 0, 60 ); +camera.lookAt( new THREE.Vector3( 0, -2, 0 ) ); + + +// цилиндър +var material = new THREE.MeshPhongMaterial({ + color: 'dimgray', + shininess: 100, + specular: 'dimgray' }); + +var cylinder = new THREE.Mesh(new THREE.CylinderGeometry( 10, 10, 15, 160 ), material); + +var hole = new THREE.Mesh(new THREE.CylinderGeometry(6, 6, 15, 160)); + +var frontRec1 = new THREE.Mesh(new THREE.BoxGeometry(20, 5, 20)); +frontRec1.position.y = 5; +frontRec1.position.z = 4; +var frontRec2 = new THREE.Mesh(new THREE.BoxGeometry(5, 5, 20)); +frontRec2.position.y = 5; +frontRec2.position.x = 6; +var frontRec3 = new THREE.Mesh(new THREE.BoxGeometry(5, 5, 20)); +frontRec3.position.y = 5; +frontRec3.position.x = -6; + +var backRec1 = new THREE.Mesh(new THREE.BoxGeometry(20, 5, 20)); +backRec1.position.y = -5; +backRec1.position.z = -4; +var backRec2 = new THREE.Mesh(new THREE.BoxGeometry(5, 5, 20)); +backRec2.position.y = -5; +backRec2.position.x = 6; +var backRec3 = new THREE.Mesh(new THREE.BoxGeometry(5, 5, 20)); +backRec3.position.y = -5; +backRec3.position.x = -6; + +var csg = new CSG(); +csg.subtract([cylinder, hole, frontRec1, frontRec2, frontRec3, backRec1, backRec2, backRec3]); + +var mystery = csg.toMesh(); +mystery.material = material; + +scene.add( mystery ); + + +// светлини +light1 = new THREE.PointLight( 'white', 0.5 ); +light1.position.set( 0, 100, 50 ); +scene.add( light1 ); + +light2 = new THREE.PointLight(' white', 0.5 ); +light2.position.set( 0, 0, 0 ); +scene.add( light2 ); + +light3 = new THREE.PointLight( 'white', 0.5); +light3.position.set( 0, -100, 50 ); +scene.add( light3 ); + +light4 = new THREE.PointLight(' white', 0.5 ); +light4.position.set( 0, 0, 100 ); +scene.add( light4 ); +// стига толкова светлини + + +function drawFrame() +{ + // въртим мистериозния обект + mystery.rotation.x += 0.005; + mystery.rotation.y += 0.004; + mystery.rotation.z += 0.003; + + renderer.render( scene, camera ); +} + |
