|
21 | 21 | BufferAttribute, |
22 | 22 | BufferGeometry, |
23 | 23 | Color, |
| 24 | + CylinderBufferGeometry, |
24 | 25 | DirectionalLight, |
25 | | - DoubleSide, |
26 | 26 | GridHelper, |
27 | 27 | HemisphereLight, |
28 | 28 | IcosahedronBufferGeometry, |
|
32 | 32 | PerspectiveCamera, |
33 | 33 | PlaneBufferGeometry, |
34 | 34 | Scene, |
35 | | - TextureLoader, |
36 | 35 | VertexColors, |
37 | 36 | Vector3, |
38 | 37 | WebGLRenderer |
39 | 38 | } from "../build/three.module.js"; |
40 | 39 |
|
41 | | - import { OBJLoader } from './jsm/loaders/OBJLoader.js'; |
42 | | - |
43 | 40 | var container; |
44 | 41 | var camera, scene, renderer; |
45 | 42 | var controller1, controller2; |
|
77 | 74 | var table = new Mesh( geometry, material ); |
78 | 75 | table.position.y = 0.35; |
79 | 76 | table.position.z = 0.85; |
80 | | - table.castShadow = true; |
81 | | - table.receiveShadow = true; |
82 | | - scene.add( table ); |
83 | | - |
84 | | - /* |
85 | | - var table = new Mesh( geometry, material ); |
86 | | - table.position.y = 0.35; |
87 | | - table.position.z = -0.85; |
88 | | - table.castShadow = true; |
89 | | - table.receiveShadow = true; |
90 | 77 | scene.add( table ); |
91 | | - */ |
92 | 78 |
|
93 | 79 | var geometry = new PlaneBufferGeometry( 4, 4 ); |
94 | 80 | var material = new MeshStandardMaterial( { |
|
98 | 84 | } ); |
99 | 85 | var floor = new Mesh( geometry, material ); |
100 | 86 | floor.rotation.x = - Math.PI / 2; |
101 | | - floor.receiveShadow = true; |
102 | 87 | scene.add( floor ); |
103 | 88 |
|
104 | | - scene.add( new GridHelper( 20, 40, 0x111111, 0x111111 ) ); |
| 89 | + var grid = new GridHelper( 10, 20, 0x111111, 0x111111 ); |
| 90 | + grid.material.depthTest = false; // avoid z-fighting |
| 91 | + scene.add( grid ); |
105 | 92 |
|
106 | 93 | scene.add( new HemisphereLight( 0x888877, 0x777788 ) ); |
107 | 94 |
|
108 | | - var light = new DirectionalLight( 0xffffff ); |
109 | | - light.position.set( 0, 6, 0 ); |
110 | | - light.castShadow = true; |
111 | | - light.shadow.camera.top = 2; |
112 | | - light.shadow.camera.bottom = - 2; |
113 | | - light.shadow.camera.right = 2; |
114 | | - light.shadow.camera.left = - 2; |
115 | | - light.shadow.mapSize.set( 4096, 4096 ); |
| 95 | + var light = new DirectionalLight( 0xffffff, 0.5 ); |
| 96 | + light.position.set( 0, 4, 0 ); |
116 | 97 | scene.add( light ); |
117 | 98 |
|
118 | | - // scene.add( new DirectionalLightHelper( light ) ); |
119 | | - // scene.add( new CameraHelper( light.shadow.camera ) ); |
120 | | - |
121 | 99 | // |
122 | 100 |
|
123 | 101 | renderer = new WebGLRenderer( { antialias: true } ); |
124 | 102 | renderer.setPixelRatio( window.devicePixelRatio ); |
125 | 103 | renderer.setSize( window.innerWidth, window.innerHeight ); |
126 | 104 | renderer.gammaInput = true; |
127 | 105 | renderer.gammaOutput = true; |
128 | | - renderer.shadowMap.enabled = true; |
129 | 106 | renderer.vr.enabled = true; |
130 | 107 | container.appendChild( renderer.domElement ); |
131 | 108 |
|
|
159 | 136 | controller2.userData.matrices = [ new Matrix4(), new Matrix4() ]; |
160 | 137 | scene.add( controller2 ); |
161 | 138 |
|
162 | | - var loader = new OBJLoader(); |
163 | | - loader.setPath( 'models/obj/vive-controller/' ); |
164 | | - loader.load( 'vr_controller_vive_1_5.obj', function ( object ) { |
165 | | - |
166 | | - var loader = new TextureLoader(); |
167 | | - loader.setPath( 'models/obj/vive-controller/' ); |
168 | | - |
169 | | - var controller = object.children[ 0 ]; |
170 | | - controller.material.map = loader.load( 'onepointfive_texture.png' ); |
171 | | - controller.material.specularMap = loader.load( 'onepointfive_spec.png' ); |
172 | | - controller.castShadow = true; |
173 | | - controller.receiveShadow = true; |
174 | | - |
175 | | - // var pivot = new Group(); |
176 | | - // var pivot = new Mesh( new BoxBufferGeometry( 0.01, 0.01, 0.01 ) ); |
177 | | - var pivot = new Mesh( new IcosahedronBufferGeometry( 0.01, 2 ) ); |
178 | | - pivot.name = 'pivot'; |
179 | | - pivot.position.y = - 0.016; |
180 | | - pivot.position.z = - 0.043; |
181 | | - pivot.rotation.x = Math.PI / 5.5; |
182 | | - controller.add( pivot ); |
| 139 | + // |
183 | 140 |
|
184 | | - controller1.add( controller.clone() ); |
| 141 | + var geometry = new CylinderBufferGeometry( 0.01, 0.02, 0.08, 5 ); |
| 142 | + geometry.rotateX( - Math.PI / 2 ); |
| 143 | + var material = new MeshStandardMaterial( { flatShading: true } ); |
| 144 | + var mesh = new Mesh( geometry, material ); |
185 | 145 |
|
186 | | - pivot.material = pivot.material.clone(); |
187 | | - controller2.add( controller.clone() ); |
| 146 | + var pivot = new Mesh( new IcosahedronBufferGeometry( 0.01, 2 ) ); |
| 147 | + pivot.name = 'pivot'; |
| 148 | + pivot.position.z = - 0.05; |
| 149 | + mesh.add( pivot ); |
188 | 150 |
|
189 | | - } ); |
| 151 | + controller1.add( mesh.clone() ); |
| 152 | + controller2.add( mesh.clone() ); |
190 | 153 |
|
191 | 154 | // |
192 | 155 |
|
|
212 | 175 |
|
213 | 176 | geometry.drawRange.count = 0; |
214 | 177 |
|
215 | | - // |
216 | | - |
217 | | - /* |
218 | | - var path = "textures/cube/SwedishRoyalCastle/"; |
219 | | - var format = '.jpg'; |
220 | | - var urls = [ |
221 | | - path + 'px' + format, path + 'nx' + format, |
222 | | - path + 'py' + format, path + 'ny' + format, |
223 | | - path + 'pz' + format, path + 'nz' + format |
224 | | - ]; |
225 | | -
|
226 | | - var reflectionCube = new CubeTextureLoader().load( urls ); |
227 | | - */ |
228 | | - |
229 | 178 | var material = new MeshStandardMaterial( { |
230 | 179 | roughness: 0.9, |
231 | 180 | metalness: 0.0, |
232 | | - // envMap: reflectionCube, |
233 | | - vertexColors: VertexColors, |
234 | | - side: DoubleSide |
| 181 | + vertexColors: VertexColors |
235 | 182 | } ); |
236 | 183 |
|
237 | 184 | line = new Mesh( geometry, material ); |
238 | 185 | line.frustumCulled = false; |
239 | | - line.castShadow = true; |
240 | | - line.receiveShadow = true; |
241 | 186 | scene.add( line ); |
242 | 187 |
|
243 | 188 | // Shapes |
|
0 commit comments