[CT404]: Add Week 2 lecture examples
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,44 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<script src="three.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
// create renderer attached to HTML Canvas object
|
||||||
|
var c = document.getElementById("canvas");
|
||||||
|
var renderer = new THREE.WebGLRenderer({ canvas: c, antialias: true });
|
||||||
|
|
||||||
|
// create the scenegraph
|
||||||
|
var scene = new THREE.Scene();
|
||||||
|
|
||||||
|
// create a camera
|
||||||
|
var fov = 75;
|
||||||
|
var aspect = 600/600;
|
||||||
|
var near = 0.1;
|
||||||
|
var far = 1000;
|
||||||
|
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
||||||
|
camera.position.z = 100;
|
||||||
|
|
||||||
|
// add a light to the scene
|
||||||
|
var light = new THREE.PointLight(0xFFFF00);
|
||||||
|
light.position.set(10, 30, 25);
|
||||||
|
scene.add(light);
|
||||||
|
|
||||||
|
// add a cube to the scene
|
||||||
|
var geometry = new THREE.BoxGeometry(20, 20, 20);
|
||||||
|
var material = new THREE.MeshLambertMaterial({color: 0xfd59d7});
|
||||||
|
var cube = new THREE.Mesh(geometry, material);
|
||||||
|
scene.add(cube);
|
||||||
|
|
||||||
|
// render the scene as seen by the camera
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="draw();">
|
||||||
|
<canvas id="canvas" width="600" height="600"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,76 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<script src="three.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
var scene;
|
||||||
|
|
||||||
|
function addGeometryAtPosition(geometry, x, y, z) {
|
||||||
|
var material = new THREE.MeshLambertMaterial({color: 0xffffff});
|
||||||
|
var mesh = new THREE.Mesh(geometry, material);
|
||||||
|
scene.add(mesh);
|
||||||
|
mesh.position.set(x,y,z);
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
// create renderer attached to HTML Canvas object
|
||||||
|
var c = document.getElementById("canvas");
|
||||||
|
var renderer = new THREE.WebGLRenderer({ canvas: c, antialias: true });
|
||||||
|
|
||||||
|
// create the scenegraph (global variable)
|
||||||
|
scene = new THREE.Scene();
|
||||||
|
|
||||||
|
// create a camera
|
||||||
|
var fov = 75;
|
||||||
|
var aspect = 400/600;
|
||||||
|
var near = 0.1;
|
||||||
|
var far = 1000;
|
||||||
|
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
||||||
|
camera.position.z = 100;
|
||||||
|
|
||||||
|
// add a light to the scene
|
||||||
|
var light = new THREE.PointLight(0xFFFF00);
|
||||||
|
light.position.set(10, 0, 25);
|
||||||
|
scene.add(light);
|
||||||
|
|
||||||
|
// add a bunch of sample primitives to the scene
|
||||||
|
// see more here: https://threejsfundamentals.org/threejs/lessons/threejs-primitives.html
|
||||||
|
|
||||||
|
// args: width, height, depth
|
||||||
|
addGeometryAtPosition(new THREE.BoxGeometry(6,4,8), -50, 0, 0);
|
||||||
|
|
||||||
|
// args: radius, segments
|
||||||
|
addGeometryAtPosition(new THREE.CircleBufferGeometry(7, 24), -30, 0, 0);
|
||||||
|
|
||||||
|
// args: radius, height, segments
|
||||||
|
addGeometryAtPosition(new THREE.ConeBufferGeometry(6, 4, 24), -10, 0, 0);
|
||||||
|
|
||||||
|
// args: radiusTop, radiusBottom, height, radialSegments
|
||||||
|
addGeometryAtPosition(new THREE.CylinderBufferGeometry(4, 4, 8, 12), 20, 0, 0);
|
||||||
|
|
||||||
|
// arg: radius
|
||||||
|
// Polyhedrons
|
||||||
|
// (Dodecahedron is a 12-sided polyhedron, Icosahedron is 20-sided, Octahedron is 8-sided, Tetrahedron is 4-sided)
|
||||||
|
addGeometryAtPosition(new THREE.DodecahedronBufferGeometry(7), 40, 0, 0);
|
||||||
|
addGeometryAtPosition(new THREE.IcosahedronBufferGeometry(7), -50, 20, 0);
|
||||||
|
addGeometryAtPosition(new THREE.OctahedronBufferGeometry(7), -30, 20, 0);
|
||||||
|
addGeometryAtPosition(new THREE.TetrahedronBufferGeometry(7), -10, 20, 0);
|
||||||
|
|
||||||
|
// args: radius, widthSegments, heightSegments
|
||||||
|
addGeometryAtPosition(new THREE.SphereBufferGeometry(7,12,8), 20, 20, 0);
|
||||||
|
|
||||||
|
// args: radius, tubeRadius, radialSegments, tubularSegments
|
||||||
|
addGeometryAtPosition(new THREE.TorusBufferGeometry(5,2,8,24), 40, 20, 0);
|
||||||
|
|
||||||
|
// render the scene as seen by the camera
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="draw();">
|
||||||
|
<canvas id="canvas" width="600" height="600"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,68 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<script src="three.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
// create renderer attached to HTML Canvas object
|
||||||
|
var c = document.getElementById("canvas");
|
||||||
|
var renderer = new THREE.WebGLRenderer({ canvas: c, antialias: true });
|
||||||
|
|
||||||
|
// create the scenegraph
|
||||||
|
var scene = new THREE.Scene();
|
||||||
|
|
||||||
|
// create a camera
|
||||||
|
var fov = 75;
|
||||||
|
var aspect = 600/600;
|
||||||
|
var near = 0.1;
|
||||||
|
var far = 1000;
|
||||||
|
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
||||||
|
camera.position.set(0, 10, 30);
|
||||||
|
|
||||||
|
// add a light to the scene
|
||||||
|
var light = new THREE.PointLight(0xFFFFFF);
|
||||||
|
light.position.set(0, 10, 30);
|
||||||
|
scene.add(light);
|
||||||
|
|
||||||
|
// add a cylinder ('hut walls')
|
||||||
|
// args: radiusTop, radiusBottom, height, radialSegments
|
||||||
|
var walls = new THREE.Mesh(
|
||||||
|
new THREE.CylinderBufferGeometry(4, 4, 4, 12),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0x800020}) );
|
||||||
|
scene.add(walls);
|
||||||
|
|
||||||
|
// add a cone ('hut roof')
|
||||||
|
// args: radius, height, segments
|
||||||
|
var roof = new THREE.Mesh(
|
||||||
|
new THREE.ConeBufferGeometry(6, 4, 24),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0x800080}) );
|
||||||
|
///scene.add(roof); // not needed, since roof will be added as a child of walls
|
||||||
|
roof.position.set(0, 4, 0);
|
||||||
|
|
||||||
|
// set the roof as a child of the walls, i.e. nest their coordinate systems
|
||||||
|
walls.add(roof);
|
||||||
|
|
||||||
|
// move the walls.. and their nested roof! (try it with the previous line removed)
|
||||||
|
walls.position.set(0,-5,0);
|
||||||
|
|
||||||
|
// clone the walls object and its children
|
||||||
|
// and move the cloned "hut" to a new (random) position
|
||||||
|
var hut2 = walls.clone();
|
||||||
|
scene.add(hut2);
|
||||||
|
var x = (Math.random()-0.5)*15;
|
||||||
|
var y = (Math.random()-0.5)*15;
|
||||||
|
var z = (Math.random()-0.5)*15;
|
||||||
|
hut2.position.set(x,y,z);
|
||||||
|
|
||||||
|
// render the scene as seen by the camera
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="draw();">
|
||||||
|
<canvas id="canvas" width="600" height="600"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,57 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<script src="three.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
// create renderer attached to HTML Canvas object
|
||||||
|
var c = document.getElementById("canvas");
|
||||||
|
var renderer = new THREE.WebGLRenderer({ canvas: c, antialias: true });
|
||||||
|
|
||||||
|
// create the scenegraph
|
||||||
|
var scene = new THREE.Scene();
|
||||||
|
|
||||||
|
// create a camera
|
||||||
|
var fov = 75;
|
||||||
|
var aspect = 600/600;
|
||||||
|
var near = 0.1;
|
||||||
|
var far = 1000;
|
||||||
|
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
||||||
|
camera.position.set(0, 10, 30);
|
||||||
|
|
||||||
|
// add a light to the scene
|
||||||
|
var light = new THREE.PointLight(0xFFFFFF);
|
||||||
|
light.position.set(0, 10, 30);
|
||||||
|
scene.add(light);
|
||||||
|
|
||||||
|
// add a cylinder
|
||||||
|
// args: radiusTop, radiusBottom, height, radialSegments
|
||||||
|
var cyl = new THREE.Mesh(
|
||||||
|
new THREE.CylinderBufferGeometry(1, 1, 10, 12),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0xAAAAAA}) );
|
||||||
|
scene.add(cyl);
|
||||||
|
|
||||||
|
// clone the cylinder
|
||||||
|
var cyl2 = cyl.clone();
|
||||||
|
|
||||||
|
// modify its rotation by 60 degrees around its z axis
|
||||||
|
cyl2.rotateOnAxis(new THREE.Vector3(0,0,1), Math.PI/3);
|
||||||
|
scene.add(cyl2);
|
||||||
|
// clone the cylinder again
|
||||||
|
var cyl3 = cyl.clone();
|
||||||
|
scene.add(cyl3);
|
||||||
|
// set its rotation directly using "Euler angles", to 120 degrees on z axis
|
||||||
|
cyl3.rotation.set(0,0,2*Math.PI/3);
|
||||||
|
|
||||||
|
// render the scene as seen by the camera
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="draw();">
|
||||||
|
<canvas id="canvas" width="600" height="600"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,80 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<script src="three.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
// create renderer attached to HTML Canvas object
|
||||||
|
var c = document.getElementById("canvas");
|
||||||
|
var renderer = new THREE.WebGLRenderer({ canvas: c, antialias: true });
|
||||||
|
|
||||||
|
// create the scenegraph
|
||||||
|
var scene = new THREE.Scene();
|
||||||
|
|
||||||
|
// create a camera
|
||||||
|
var fov = 75;
|
||||||
|
var aspect = 600/600;
|
||||||
|
var near = 0.1;
|
||||||
|
var far = 1000;
|
||||||
|
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
||||||
|
camera.position.set(0, 1.5, 6);
|
||||||
|
|
||||||
|
// add a light to the scene
|
||||||
|
var light = new THREE.PointLight(0xFFFFFF);
|
||||||
|
light.position.set(0, 10, 30);
|
||||||
|
scene.add(light);
|
||||||
|
|
||||||
|
// desk lamp base
|
||||||
|
// args: radiusTop, radiusBottom, height, radialSegments
|
||||||
|
var base = new THREE.Mesh(
|
||||||
|
new THREE.CylinderBufferGeometry(1, 1, 0.1, 12),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0xAAAAAA}) );
|
||||||
|
scene.add(base);
|
||||||
|
|
||||||
|
// desk lamp first arm piece
|
||||||
|
var arm = new THREE.Mesh(
|
||||||
|
new THREE.CylinderBufferGeometry(0.1, 0.1, 3, 12),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0xAAAAAA}) );
|
||||||
|
|
||||||
|
// since we want to rotate around a point other than the arm's centre,
|
||||||
|
// we can create a pivot point as the parent of the arm, position the
|
||||||
|
// arm relative to that pivot point, and apply rotation on the pivot point
|
||||||
|
var pivot = new THREE.Object3D();
|
||||||
|
// centre of rotation we want
|
||||||
|
// (in world coordinates, since pivot is not yet a child of the base)
|
||||||
|
pivot.position.set(0, 0, 0);
|
||||||
|
pivot.add(arm); // pivot is parent of arm
|
||||||
|
base.add(pivot); // base is parent of pivot
|
||||||
|
|
||||||
|
// translate arm relative to its parent, i.e. 'pivot'
|
||||||
|
arm.position.set(0, 1.5, 0);
|
||||||
|
// rotate pivot point relative to its parent, i.e. 'base'
|
||||||
|
pivot.rotateOnAxis(new THREE.Vector3(0,0,1), -Math.PI/6);
|
||||||
|
|
||||||
|
// clone a second arm piece (consisting of a pivot with a cylinder as its child)
|
||||||
|
var pivot2 = pivot.clone();
|
||||||
|
// add as a child of the 1st pivot
|
||||||
|
pivot.add(pivot2);
|
||||||
|
// rotate the 2nd pivot relative to the 1st pivot (since it's nested)
|
||||||
|
pivot2.rotation.z = Math.PI/3;
|
||||||
|
// translate the 2nd pivot relative to the 1st pivot
|
||||||
|
pivot2.position.set(0,3,0);
|
||||||
|
|
||||||
|
// TEST: we can rotate the 1st arm piece and the 2nd arm piece should stay correct
|
||||||
|
pivot.rotateOnAxis(new THREE.Vector3(0,0,1), Math.PI/12);
|
||||||
|
|
||||||
|
// TEST: we can also move the base, and everything stays correct
|
||||||
|
base.position.x -= 3;
|
||||||
|
|
||||||
|
// render the scene as seen by the camera
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="draw();">
|
||||||
|
<canvas id="canvas" width="600" height="600"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,61 @@
|
|||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
|
||||||
|
<script src="three.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
// create renderer attached to HTML Canvas object
|
||||||
|
var c = document.getElementById("canvas");
|
||||||
|
var renderer = new THREE.WebGLRenderer({ canvas: c, antialias: true });
|
||||||
|
|
||||||
|
// create the scenegraph
|
||||||
|
var scene = new THREE.Scene();
|
||||||
|
|
||||||
|
// create a camera
|
||||||
|
var fov = 75;
|
||||||
|
var aspect = 600/600;
|
||||||
|
var near = 0.1;
|
||||||
|
var far = 1000;
|
||||||
|
var camera = new THREE.PerspectiveCamera( fov, aspect, near, far );
|
||||||
|
camera.position.set(0, 10, 30);
|
||||||
|
|
||||||
|
// add a light to the scene
|
||||||
|
var light = new THREE.PointLight(0xFFFFFF);
|
||||||
|
light.position.set(0, 10, 30);
|
||||||
|
scene.add(light);
|
||||||
|
|
||||||
|
// "fuselage"
|
||||||
|
// args: radius, widthSegments, heightSegments
|
||||||
|
var fuselage = new THREE.Mesh(
|
||||||
|
new THREE.SphereBufferGeometry(7,12,8),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0xAAAAAA}) );
|
||||||
|
scene.add(fuselage);
|
||||||
|
fuselage.scale.set(2, 0.2, 0.5);
|
||||||
|
|
||||||
|
// "wing"
|
||||||
|
// args: radiusTop, radiusBottom, height, radialSegments
|
||||||
|
var wing = new THREE.Mesh(
|
||||||
|
new THREE.CylinderBufferGeometry(4, 4, 1, 60),
|
||||||
|
new THREE.MeshLambertMaterial({color: 0xAAAAAA}) );
|
||||||
|
scene.add(wing);
|
||||||
|
wing.scale.set(0.5, 0.2, 3);
|
||||||
|
|
||||||
|
// use a scaled coordinate system to modify clones of the fuselage and wing
|
||||||
|
var scaledGroup = new THREE.Object3D();
|
||||||
|
scaledGroup.add(fuselage.clone());
|
||||||
|
scaledGroup.add(wing.clone());
|
||||||
|
scaledGroup.scale.set(0.25, 1.5, 0.75);
|
||||||
|
scene.add(scaledGroup);
|
||||||
|
|
||||||
|
// render the scene as seen by the camera
|
||||||
|
renderer.render(scene, camera);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="draw();">
|
||||||
|
<canvas id="canvas" width="600" height="600"></canvas>
|
||||||
|
</body>
|
||||||
|
</html>
|
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user