4 <title>three.js webgl - collada - kinematics</title>
6 <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
21 font-family:Monospace;
33 <a href="http://threejs.org" target="_blank" rel="noopener">three.js</a> collada loader - kinematics
34 | robot from <a href="https://github.com/rdiankov/collada_robots" target="_blank" rel="noopener">collada robots</a>
37 <script src="../build/three.js"></script>
39 <script src="js/libs/tween.min.js"></script>
40 <script src="js/loaders/ColladaLoader2.js"></script>
42 <script src="js/Detector.js"></script>
43 <script src="js/libs/stats.min.js"></script>
47 if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
51 var camera, scene, renderer, objects;
57 var tweenParameters = {};
59 var loader = new THREE.ColladaLoader();
60 loader.options.convertUpAxis = true;
61 loader.load( './models/collada/kawada-hironx.dae', function ( collada ) {
65 dae.traverse( function ( child ) {
67 if ( child instanceof THREE.Mesh ) {
69 // model does not have normals
70 child.material.flatShading = true;
76 dae.scale.x = dae.scale.y = dae.scale.z = 10.0;
79 kinematics = collada.kinematics;
88 container = document.createElement( 'div' );
89 document.body.appendChild( container );
91 camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
92 camera.position.set( 2, 2, 3 );
94 scene = new THREE.Scene();
98 var grid = new THREE.GridHelper( 20, 20 );
105 particleLight = new THREE.Mesh( new THREE.SphereGeometry( 4, 8, 8 ), new THREE.MeshBasicMaterial( { color: 0xffffff } ) );
106 scene.add( particleLight );
110 var light = new THREE.HemisphereLight( 0xffeeee, 0x111122 );
113 var pointLight = new THREE.PointLight( 0xffffff, 0.3 );
114 particleLight.add( pointLight );
116 renderer = new THREE.WebGLRenderer();
117 renderer.setPixelRatio( window.devicePixelRatio );
118 renderer.setSize( window.innerWidth, window.innerHeight );
119 container.appendChild( renderer.domElement );
122 container.appendChild( stats.dom );
128 window.addEventListener( 'resize', onWindowResize, false );
132 function setupTween() {
134 var duration = THREE.Math.randInt( 1000, 5000 );
138 for ( var i = 0; i < kinematics.joints.length; i ++ ) {
140 var joint = kinematics.joints[ i ];
142 var old = tweenParameters[ i ];
144 var position = old ? old : joint.zeroPosition;
146 tweenParameters[ i ] = position;
148 target[ i ] = THREE.Math.randInt( joint.limits.min, joint.limits.max )
152 kinematicsTween = new TWEEN.Tween( tweenParameters ).to( target, duration ).easing( TWEEN.Easing.Quadratic.Out );
154 kinematicsTween.onUpdate( function() {
156 for ( var i = 0; i < kinematics.joints.length; i ++ ) {
158 kinematics.setJointValue( i, this[ i ] );
164 kinematicsTween.start();
166 setTimeout( setupTween, duration );
170 function onWindowResize() {
172 camera.aspect = window.innerWidth / window.innerHeight;
173 camera.updateProjectionMatrix();
175 renderer.setSize( window.innerWidth, window.innerHeight );
183 requestAnimationFrame( animate );
193 var timer = Date.now() * 0.0001;
195 camera.position.x = Math.cos( timer ) * 17;
196 camera.position.y = 10;
197 camera.position.z = Math.sin( timer ) * 17;
199 camera.lookAt( scene.position );
201 particleLight.position.x = Math.sin( timer * 4 ) * 3009;
202 particleLight.position.y = Math.cos( timer * 5 ) * 4000;
203 particleLight.position.z = Math.cos( timer * 4 ) * 3009;
205 renderer.render( scene, camera );