|
7 | 7 | <style> |
8 | 8 | body { |
9 | 9 | font-family: Monospace; |
10 | | - background-color: #f0f0f0; |
| 10 | + color: #fff; |
11 | 11 | margin: 0px; |
12 | 12 | overflow: hidden; |
13 | 13 | } |
| 14 | + a { |
| 15 | + color: #ffffff; |
| 16 | + } |
14 | 17 | </style> |
15 | 18 | </head> |
16 | 19 | <body> |
17 | 20 |
|
18 | 21 | <script src="../build/three.js"></script> |
19 | 22 | <script src="js/controls/OrbitControls.js"></script> |
20 | 23 | <script src="js/modifiers/SimplifyModifier.js"></script> |
21 | | - <script src="js/libs/stats.min.js"></script> |
22 | 24 |
|
23 | 25 | <script> |
24 | 26 |
|
25 | | - var container, stats; |
26 | | - |
27 | | - var camera, controls, scene, renderer; |
28 | | - |
29 | | - var boxGeometry = new THREE.BoxBufferGeometry( 80, 80, 80, 4, 4, 4 ); |
30 | | - var torusGeometry = new THREE.TorusBufferGeometry( 50, 25, 8, 8, Math.PI * 2 ); |
31 | | - var sphereGeometry = new THREE.SphereBufferGeometry( 50, 15, 15 ); |
32 | | - var planeGeometry = new THREE.PlaneBufferGeometry( 100, 100, 6, 6 ); |
33 | | - |
34 | | - var modifer = new THREE.SimplifyModifier(); |
35 | | - var meshes = []; |
36 | | - var count = 0; |
37 | | - |
38 | | - var wireframeMaterial = new THREE.MeshBasicMaterial( { color: 0x000000, wireframe: true, transparent: true } ); |
| 27 | + var renderer, scene, camera; |
39 | 28 |
|
40 | 29 | init(); |
41 | | - animate(); |
42 | | - |
43 | | - |
44 | | - function addStuff( geometry ) { |
45 | | - |
46 | | - count ++; |
47 | | - |
48 | | - var mesh, wireframe; |
49 | | - |
50 | | - var material = new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } ); |
51 | | - |
52 | | - var vertexCount = geometry.attributes.position.count; |
53 | | - |
54 | | - var simplified = modifer.modify( geometry, Math.floor( vertexCount * 0.5 ) ); |
55 | | - |
56 | | - mesh = new THREE.Mesh( simplified, material ); |
57 | | - wireframe = new THREE.Mesh( simplified, wireframeMaterial ); |
58 | | - mesh.add( wireframe ); |
59 | | - mesh.position.x = - 200; |
60 | | - mesh.position.y = count * 150 - 300; |
61 | | - |
62 | | - scene.add( mesh ); |
63 | | - meshes.push( mesh ); |
64 | | - |
65 | | - mesh = new THREE.Mesh( geometry, material ); |
66 | | - wireframe = new THREE.Mesh( geometry, wireframeMaterial ); |
67 | | - mesh.add( wireframe ); |
68 | | - mesh.position.x = 200; |
69 | | - mesh.position.y = count * 150 - 300; |
70 | | - |
71 | | - scene.add( mesh ); |
72 | | - meshes.push ( mesh ); |
73 | | - |
74 | | - } |
75 | 30 |
|
76 | 31 | function init() { |
77 | 32 |
|
78 | | - container = document.createElement( 'div' ); |
79 | | - document.body.appendChild( container ); |
80 | | - |
81 | 33 | var info = document.createElement( 'div' ); |
82 | 34 | info.style.position = 'absolute'; |
83 | 35 | info.style.top = '10px'; |
84 | 36 | info.style.width = '100%'; |
85 | 37 | info.style.textAlign = 'center'; |
86 | | - info.innerHTML = '50% Vertex Reduction using SimplifyModifier'; |
87 | | - container.appendChild( info ); |
| 38 | + info.innerHTML = '<a href="https://threejs.org" target="_blank" rel="noopener">three.js</a> - Vertex Reduction using SimplifyModifier'; |
| 39 | + document.body.appendChild( info ); |
88 | 40 |
|
89 | | - camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 1, 1000 ); |
90 | | - camera.position.z = 500; |
| 41 | + renderer = new THREE.WebGLRenderer( { antialias: true } ); |
| 42 | + renderer.setPixelRatio( window.devicePixelRatio ); |
| 43 | + renderer.setSize( window.innerWidth, window.innerHeight ); |
| 44 | + document.body.appendChild( renderer.domElement ); |
91 | 45 |
|
92 | 46 | scene = new THREE.Scene(); |
93 | | - scene.background = new THREE.Color( 0xf0f0f0 ); |
94 | 47 |
|
95 | | - var light = new THREE.PointLight( 0xffffff, 1.5 ); |
96 | | - light.position.set( 1000, 1000, 2000 ); |
97 | | - scene.add( light ); |
| 48 | + camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 ); |
| 49 | + camera.position.z = 15; |
98 | 50 |
|
99 | | - addStuff( planeGeometry ); |
100 | | - addStuff( boxGeometry ); |
101 | | - addStuff( sphereGeometry ); |
102 | | - addStuff( torusGeometry ); |
| 51 | + var controls = new THREE.OrbitControls( camera, renderer.domElement ); |
| 52 | + controls.addEventListener( 'change', render ); // use if there is no animation loop |
| 53 | + controls.enablePan = false; |
| 54 | + controls.enableZoom = false; |
103 | 55 |
|
104 | | - renderer = new THREE.WebGLRenderer( { antialias: true } ); |
105 | | - renderer.setPixelRatio( window.devicePixelRatio ); |
106 | | - renderer.setSize( window.innerWidth, window.innerHeight ); |
107 | | - container.appendChild( renderer.domElement ); |
| 56 | + scene.add( new THREE.AmbientLight( 0xffffff, 0.2 ) ); |
108 | 57 |
|
109 | | - stats = new Stats(); |
110 | | - container.appendChild( stats.dom ); |
| 58 | + var light = new THREE.PointLight( 0xffffff, 0.7 ); |
| 59 | + camera.add( light ); |
| 60 | + scene.add( camera ); |
111 | 61 |
|
112 | | - // |
| 62 | + new THREE.JSONLoader().load( "models/json/leeperrysmith/LeePerrySmith.json", function ( geometry ) { |
113 | 63 |
|
114 | | - controls = new THREE.OrbitControls( camera, renderer.domElement ); |
| 64 | + var material = new THREE.MeshPhongMaterial( { color: 0xAEAED5, shininess: 1 } ); |
115 | 65 |
|
116 | | - window.addEventListener( 'resize', onWindowResize, false ); |
| 66 | + var mesh = new THREE.Mesh( geometry, material ); |
| 67 | + mesh.position.x = - 3; |
| 68 | + mesh.rotation.y = Math.PI / 2; |
| 69 | + scene.add( mesh ); |
117 | 70 |
|
118 | | - } |
| 71 | + var modifer = new THREE.SimplifyModifier(); |
119 | 72 |
|
120 | | - function onWindowResize() { |
| 73 | + var simplified = modifer.modify( geometry, Math.floor( geometry.vertices.length * 0.9375 ) ); // number of vertices to remove |
121 | 74 |
|
122 | | - camera.aspect = window.innerWidth / window.innerHeight; |
123 | | - camera.updateProjectionMatrix(); |
| 75 | + var material = new THREE.MeshPhongMaterial( { color: 0xAEAED5, shininess: 1, flatShading: true } ); |
124 | 76 |
|
125 | | - renderer.setSize( window.innerWidth, window.innerHeight ); |
| 77 | + var mesh = new THREE.Mesh( simplified, material ); |
| 78 | + mesh.position.x = 3; |
| 79 | + mesh.rotation.y = - Math.PI / 2; |
| 80 | + scene.add( mesh ); |
126 | 81 |
|
127 | | - } |
| 82 | + render(); |
128 | 83 |
|
129 | | - // |
| 84 | + } ); |
130 | 85 |
|
131 | | - function animate() { |
| 86 | + window.addEventListener( 'resize', onWindowResize, false ); |
132 | 87 |
|
133 | | - meshes.forEach( function( m ) { |
134 | | - m.rotation.x += 0.01; |
135 | | - m.rotation.y += 0.01; |
136 | | - m.rotation.z += 0.01; |
137 | | - } ); |
| 88 | + } |
| 89 | + |
| 90 | + function onWindowResize() { |
| 91 | + |
| 92 | + renderer.setSize( window.innerWidth, window.innerHeight ); |
138 | 93 |
|
139 | | - requestAnimationFrame( animate ); |
| 94 | + camera.aspect = window.innerWidth / window.innerHeight; |
| 95 | + camera.updateProjectionMatrix(); |
140 | 96 |
|
141 | | - stats.begin(); |
142 | 97 | render(); |
143 | | - stats.end(); |
144 | 98 |
|
145 | 99 | } |
146 | 100 |
|
|
0 commit comments