KEMBAR78
Three.js basics | PDF
Vasilika Klimova
Frontend Team Lead
Three.js basics
2
vasilika.ru
Vasilika Klimova
vasilika.klimova
Lik04ka
• travelling
• computer games
• to help people
3
Frontend in Artec3D
4
Schools
5
Artec3D scanners
www.artec3d.com
6
Artec3D Booth
shapify.com
viewshape.com
7
Contents
WebGL application
Advantages
Three.js library
Basics of 3D graphics
3D viewer
8
9
Interactive maps
rainforest link
10
WebVR
WebVR link
11
Mapbox GL JS
mapbox link
GL-React
gl-react link
13
Unity 3D
14
3D tour link
3D tour
Blend4Web
15
blend4web link
16
Colosseo link
Panorama
17
• HTML5 <canvas>
• OpenGL ES 2.0
• GLSL ES 1.10
• 2D/3D
WebGL
18
Components of WebGL
<canvas/>
OpenGL
Shading Language
19
Browser Support
20
get.webgl.org
Linear algebra
21
22
Three.js
23
threejs.org
Babylon.js community
Three.js community
24
threejs/editor
Three.js Editor
25
threejs/examples
Three.js Examples
26
Files
Export files
27
3D basics
28
3D basics
• Point
• Polygon
• Object (mesh)
• Geometry
• Material
• Texture
3D basics
29
Vertex Vertex
Vertex
Polygon
Point
Object
30
3D термины
• Scene
• Light
• Camera
• Renderer
3D terms
31
Set up a scene
32
@mrdoob
33
Three.js
• three.min.js
• OBJLoader.js
• TrackballControls.js
3434
texture.jpg
35
Data-in
object.obj
Vertex list with coords (x,y,z) Texture coordinates (u,v)
Faces (v/vt)
Data-in
36
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
37
Algorithm
Player.container = document.getElementById("webgl-player");
Player.size = {
width: Player.container.offsetWidth,
height: Player.container.offsetHeight
};
Player.scene = new THREE.Scene();
38
Scene
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
Algorithm
39
PerspectiveCamera
OrthographicCamera
40
Camera types
Player.camera.position.z = 300;
Player.scene.add(Player.camera);
// PerspectiveCamera( fov,  aspect,  near,  far )
aspect = Player.size.width / Player.size.height;
Player.camera = new THREE.PerspectiveCamera(45.0, aspect, 2, 8000);
41
Camera
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
42
Algorithm
Player.light = new THREE.AmbientLight();
Player.scene.add(Player.light);
43
Light
// Player.scene.add(Player.light)
Player.scene.add(Player.light)
44
Light
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
45
Algorithm
// canvas
Player.container.appendChild(Player.renderer.domElement);
Player.renderer = new THREE.WebGLRenderer({alpha: true});
Player.renderer.setSize(Player.size.width, Player.size.height);
Renderer
46
THREE.WebGLRenderer({alpha: true})
THREE.WebGLRenderer()
47
Renderer
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
48
Algorithm
Player.textureLoader = new THREE.TextureLoader();
Player.textureLoader.load("texture.jpg", function(texture)
{
Player.texture = texture;
Player.loadModel();
});
49
Load texture
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
50
Algorithm
objectLoader.load("object.obj", function(object) {
object.traverse(function(child) {
if (child instanceof THREE.Mesh) {
child.material.map = Player.texture;
}
});
Player.scene.add(object);
});
}
loadModel: function() {
objectLoader = new THREE.OBJLoader();
51
Load model
52
Load Texture
Renderer, canvas
Load 3D object
Scene, Camera, Light
Animation
Algorithm
53
Request a browser to repeat
animate()
Draw model
Update camera position
requestAnimationFrame
animate: function() {
requestAnimationFrame(Player.animate);
Player.controls.update();
Player.renderer.render(Player.scene, Player.camera);
}
Animation loop
54
Player.controls = new THREE.TrackballControls(Player.camera,
Player.container);
animate: function() {
requestAnimationFrame(Player.animate);
Player.renderer.render(Player.scene, Player.camera);
}
Player.animate();
Player.controls.update();
Controls
55
requestId = requestAnimationFrame(animate)
cancelAnimationFrame(requestId)
Cancel animation
5656
3D viewer
3D viewer link
Wireframe
57
58
geometry = new THREE.SphereGeometry(100, 50, 50);
material = new THREE.MeshPhongMaterial({map: texture});
Player.mesh = new THREE.Mesh(geometry, material);
Player.scene.add(Player.mesh);
Sphere
59
Sphere texture
vasilika.ru/wireframe
Wireframe
60
Wireframe Code
61
WebGL 2.0
WebGL 2.0
62
63
Advantages
• High GPU Performance
• No compilation
• Cross-platform
• Automatic memory management
• Open standard
64
Disavantages
• Raster graphics
• Optimization required
• Poly-polygonal scenes
65
Where can I use it?
• Raster graphics rendering
• Image editing and analysis
• Filtering video
• Interactive graphics
• Games
• Statistics in the form of graphs
Interactivity
67
Gamification
68
Useful links
WebGL Fundamentals
WebGL Academy
Learning Three.js: The JavaScript 3D Library for WebGL
Mozilla
Three.js Books
learningwebgl.com
davidscottlyons.com/threejs
Thanks for listening!
vasilika.ru
Vasilika Klimova
vasilika.klimova
Lik04ka

Three.js basics