|
60 | 60 | followSphere: false, |
61 | 61 | turnHead: true, |
62 | 62 | ik_solver: true, |
| 63 | + update: updateIK |
63 | 64 | }; |
64 | 65 |
|
65 | 66 | scene = new THREE.Scene(); |
|
84 | 85 | document.body.appendChild( stats.dom ); |
85 | 86 |
|
86 | 87 | orbitControls = new OrbitControls( camera, renderer.domElement ); |
87 | | - orbitControls.minDistance = .2; |
| 88 | + orbitControls.minDistance = 0.2; |
88 | 89 | orbitControls.maxDistance = 1.5; |
89 | 90 | orbitControls.enableDamping = true; |
90 | 91 |
|
|
105 | 106 | if ( n.name === 'boule' ) OOI.sphere = n; |
106 | 107 | if ( n.name === 'Kira_Shirt_left' ) OOI.kira = n; |
107 | 108 |
|
108 | | - if ( n.isMesh ) n.frustumCulled = false; |
109 | | - |
110 | 109 | } ); |
111 | 110 | scene.add( gltf.scene ); |
112 | 111 |
|
|
121 | 120 | OOI.sphere.material = mirrorSphereMaterial; |
122 | 121 |
|
123 | 122 | transformControls = new TransformControls( camera, renderer.domElement ); |
124 | | - transformControls.size = .75; |
| 123 | + transformControls.size = 0.75; |
125 | 124 | transformControls.showX = false; |
126 | 125 | transformControls.space = 'world'; |
127 | 126 | transformControls.attach( OOI.target_hand_l ); |
128 | 127 | scene.add( transformControls ); |
| 128 | + |
129 | 129 | // disable orbitControls while using transformControls |
130 | 130 | transformControls.addEventListener( 'mouseDown', () => orbitControls.enabled = false ); |
131 | 131 | transformControls.addEventListener( 'mouseUp', () => orbitControls.enabled = true ); |
|
157 | 157 | gui.add( conf, 'followSphere' ).name( 'follow sphere' ); |
158 | 158 | gui.add( conf, 'turnHead' ).name( 'turn head' ); |
159 | 159 | gui.add( conf, 'ik_solver' ).name( 'IK auto update' ); |
160 | | - gui.add( IKSolver, 'update' ).name( 'IK manual update()' ); |
| 160 | + gui.add( conf, 'update' ).name( 'IK manual update()' ); |
161 | 161 | gui.open(); |
162 | 162 |
|
163 | 163 | window.addEventListener( 'resize', onWindowResize, false ); |
|
179 | 179 |
|
180 | 180 | // orbitControls follows the sphere |
181 | 181 | OOI.sphere.getWorldPosition( v0 ); |
182 | | - orbitControls.target.lerp( v0, .1 ); |
| 182 | + orbitControls.target.lerp( v0, 0.1 ); |
183 | 183 |
|
184 | 184 | } |
185 | 185 |
|
|
194 | 194 |
|
195 | 195 | if ( conf.ik_solver ) { |
196 | 196 |
|
197 | | - if ( IKSolver ) IKSolver.update(); |
| 197 | + updateIK(); |
198 | 198 |
|
199 | 199 | } |
200 | 200 |
|
|
207 | 207 |
|
208 | 208 | } |
209 | 209 |
|
| 210 | + function updateIK() { |
| 211 | + |
| 212 | + if ( IKSolver ) IKSolver.update(); |
| 213 | + |
| 214 | + scene.traverse( function ( object ) { |
| 215 | + |
| 216 | + if ( object.isSkinnedMesh ) object.computeBoundingSphere(); |
| 217 | + |
| 218 | + } ); |
| 219 | + |
| 220 | + } |
| 221 | + |
210 | 222 | function onWindowResize() { |
211 | 223 |
|
212 | 224 | camera.aspect = window.innerWidth / window.innerHeight; |
|
0 commit comments