<commit_before><!DOCTYPE html>
<html lang="en">
	<head>
		<title>three.js webgl - animation - basic</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<style>
			body {
				color: #fff;
				font-family:Monospace;
				font-size:13px;
				text-align:center;

				background-color: #000;
				margin: 0px;
				overflow: hidden;
			}

			#info {
				position: absolute;
				top: 0px; width: 100%;
				padding: 5px;
			}

			a {
				color: #f00;
			}

		</style>
	</head>
	<body>

		<div id="container"></div>

		<div id="info">
			<a href="http://threejs.org" target="_blank">three.js</a> webgl - animation - basic use
		</div>

		<script src="../build/three.js"></script>
		<script src="js/Detector.js"></script>
		<script src="js/libs/stats.min.js"></script>

		<script>

			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

			var stats, clock;
			var scene, camera, renderer, mixer;

			init();
			animate();

			function init() {

				scene = new THREE.Scene();

				var container = document.getElementById( 'container' );

				//

				camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 );
				camera.position.set( 50, 50, 100 );
				camera.lookAt( scene.position );

				//

				var axisHelper = new THREE.AxisHelper( 10 );
				scene.add( axisHelper );

				//

				var geometry = new THREE.SphereBufferGeometry( 5, 32, 32 );
				var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
				var mesh = new THREE.Mesh( geometry, material );
				scene.add( mesh );

				// create a keyframe track (i.e. a timed sequence of keyframes) for each animated property

				var tracks = [];

				tracks.push( new THREE.NumberKeyframeTrack( '.position', [ 0, 1, 2 ], [  0, 0, 0, 30, 0, 0, 0, 0, 0 ] ) );
				tracks.push( new THREE.NumberKeyframeTrack( '.scale', [ 0, 1, 2 ], [  1, 1, 1, 2, 2, 2, 1, 1, 1 ] ) );

				// create an animation sequence with the tracks

				var clip = new THREE.AnimationClip( 'Action', -1, tracks );

				// setup the mixer and play the animation sequence

				mixer = new THREE.AnimationMixer( mesh );
				mixer.clipAction( clip ).play();

				//

				renderer = new THREE.WebGLRenderer();
				renderer.setClearColor( 0x555555 );
				renderer.setPixelRatio( window.devicePixelRatio );
				renderer.setSize( window.innerWidth, window.innerHeight );
				container.appendChild( renderer.domElement );

				//

				stats = new Stats();
				container.appendChild( stats.dom );

				//

				clock = new THREE.Clock()

				//

				window.addEventListener( 'resize', onWindowResize, false );

			};

			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			};

			function animate() {

				requestAnimationFrame( animate );

				render();

			};

			function render() {

				var delta = clock.getDelta();

				if ( mixer ) {

					mixer.update( delta );

				}

				renderer.render( scene, camera );

				stats.update();

			};

		</script>

	</body>
</html>
<commit_msg>Added rotation track and comments<commit_after><!DOCTYPE html>
<html lang="en">
	<head>
		<title>three.js webgl - animation - basic</title>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
		<style>
			body {
				color: #fff;
				font-family:Monospace;
				font-size:13px;
				text-align:center;

				background-color: #000;
				margin: 0px;
				overflow: hidden;
			}

			#info {
				position: absolute;
				top: 0px; width: 100%;
				padding: 5px;
			}

			a {
				color: #f00;
			}

		</style>
	</head>
	<body>

		<div id="container"></div>

		<div id="info">
			<a href="http://threejs.org" target="_blank">three.js</a> webgl - animation - basic use
		</div>

		<script src="../build/three.js"></script>
		<script src="js/Detector.js"></script>
		<script src="js/libs/stats.min.js"></script>

		<script>

			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();

			var stats, clock;
			var scene, camera, renderer, mixer;

			init();
			animate();

			function init() {

				scene = new THREE.Scene();

				var container = document.getElementById( 'container' );

				//

				camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 1000 );
				camera.position.set( 50, 50, 100 );
				camera.lookAt( scene.position );

				//

				var axisHelper = new THREE.AxisHelper( 10 );
				scene.add( axisHelper );

				//

				var geometry = new THREE.BoxBufferGeometry( 5, 5, 5 );
				var material = new THREE.MeshBasicMaterial( { color: 0xffff00 } );
				var mesh = new THREE.Mesh( geometry, material );
				scene.add( mesh );

				// create a keyframe track (i.e. a timed sequence of keyframes) for each animated property
        // Note: the keyframe track type should correspond to the type of the property being animated

        // POSITION
        var positionKF = new THREE.VectorKeyframeTrack('.position', [0, 1, 2], [0, 0, 0, 30, 0, 0, 0, 0, 0]);

        // SCALE
        var scaleKF = new THREE.VectorKeyframeTrack('.scale', [0, 1, 2], [1, 1, 1, 2, 2, 2, 1, 1, 1]);

        // ROTATION
        // Rotation should be performed using quaternions, using a QuaternionKeyframeTrack
        // Interpolating Euler angles (.rotation property) can be problematic and is currently not supported
        
        // rotation about x axis
        var xAxis = new THREE.Vector3( 1, 0, 0 );

        var qInitial = new THREE.Quaternion().setFromAxisAngle( xAxis, 0 );
        var qFinal = new THREE.Quaternion().setFromAxisAngle( xAxis, Math.PI );
        var quaternionKF = new THREE.QuaternionKeyframeTrack('.quaternion', [0, 1, 2], [qInitial.x, qInitial.y, qInitial.z, qInitial.w, qFinal.x, qFinal.y, qFinal.z, qFinal.w, qInitial.x, qInitial.y, qInitial.z, qInitial.w ]);
        
        // COLOR - Not yet implemented!
        // var colorKF = new THREE.ColorKeyframeTrack('.material.color', [0, 1, 2], [0xffff00, 0xffffff, 0xffff00])

				// create an animation sequence with the tracks
        // If a negative time value is passed, the duration will be calculated from the times of the passed tracks array
				var clip = new THREE.AnimationClip( 'Action', -1, [scaleKF, positionKF, quaternionKF] );

				// setup the AnimationMixer and play the animation sequence

				mixer = new THREE.AnimationMixer( mesh );

        // create a ClipAction and set it to play
        var clipAction = mixer.clipAction( clip );
				clipAction.play();

				// 

				renderer = new THREE.WebGLRenderer();
				renderer.setClearColor( 0x555555 );
				renderer.setPixelRatio( window.devicePixelRatio );
				renderer.setSize( window.innerWidth, window.innerHeight );
				container.appendChild( renderer.domElement );

				//

				stats = new Stats();
				container.appendChild( stats.dom );

				//

				clock = new THREE.Clock()

				//

				window.addEventListener( 'resize', onWindowResize, false );

			};

			function onWindowResize() {

				camera.aspect = window.innerWidth / window.innerHeight;
				camera.updateProjectionMatrix();

				renderer.setSize( window.innerWidth, window.innerHeight );

			};

			function animate() {

				requestAnimationFrame( animate );

				render();

			};

			function render() {

				var delta = clock.getDelta();

				if ( mixer ) {

					mixer.update( delta );

				}

				renderer.render( scene, camera );

				stats.update();

			};

		</script>

	</body>
</html>

{'fraction_non_alphanumeric': 0.14127423822714683, 'fraction_numerical': 0.021896847381611923, 'mean_word_length': 2.734975369458128, 'pattern_counts': {'":': 0, '<': 57, '<?xml version=': 0, '>': 57, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5980834', 'n_tokens_mistral': 3094, 'n_tokens_neox': 2362, 'n_words': 648}