Prechádzať zdrojové kódy

Added skinning example.

Slightly modified ro.me buffalo test - using alpha test instead of alpha transparency to get rid of artefacts, also increased number of buffaloes to 375.
alteredq 14 rokov pred
rodič
commit
cbb88c6f3b

Rozdielové dáta súboru neboli zobrazené, pretože súbor je príliš veľký
+ 22 - 0
examples/obj/buffalo/buffalo.js


BIN
examples/obj/buffalo/buffalo.png


+ 242 - 0
examples/webgl_animation_skinning.html

@@ -0,0 +1,242 @@
+<!DOCTYPE HTML>
+<html lang="en">
+	<head>
+		<title>three.js webgl - animation - skinning</title>
+		<meta charset="utf-8">
+		<style type="text/css">
+			body {
+				color: #000;
+				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://github.com/mrdoob/three.js" target="_blank">three.js</a> webgl - animation - skinning -
+		buffalo model from <a href="http://ro.me">ro.me</a><br/>
+		click to start animation
+		</div>
+
+
+		<script type="text/javascript" src="../build/Three.js"></script>
+
+		<script type="text/javascript" src="js/RequestAnimationFrame.js"></script>
+		<script type="text/javascript" src="js/Detector.js"></script>
+		<script type="text/javascript" src="js/Stats.js"></script>
+
+		<script type="text/javascript">
+
+			if ( ! Detector.webgl ) Detector.addGetWebGLMessage();
+
+			window.onload = init;
+
+			var container, stats;
+
+			var camera, scene, renderer;
+
+			var mesh, light;
+
+			var mouseX = 0, mouseY = 0;
+
+			var windowHalfX = window.innerWidth / 2;
+			var windowHalfY = window.innerHeight / 2;
+
+			var height = window.innerHeight;
+
+			var animations = [];
+			var buffalos = [];
+			var offset = [];
+
+			var floor, dz = 0, dstep = -10, playback = false;
+
+			function init() {
+
+				container = document.getElementById( 'container' );
+
+				camera = new THREE.Camera( 25, window.innerWidth / height, 1, 10000 );
+				camera.position.y = 185;
+				camera.position.z = 2500;
+
+				scene = new THREE.Scene();
+				scene.fog = new THREE.FogExp2( 0xffffff, 0.0003 );
+				//scene.fog.color.setHSV( 0.1, 0.5, 1 );
+				scene.fog.color.setHSV( 0.1, 0.10, 1 );
+
+				light = new THREE.DirectionalLight( 0xffffff, 1.5 );
+				light.position.set( 0, 1, 1 );
+				light.position.normalize();
+				scene.addLight( light );
+
+				var planeSimple = new THREE.PlaneGeometry( 200, 300 );
+				var planeTesselated = new THREE.PlaneGeometry( 100, 300, 25, 40 );
+				var matWire = new THREE.MeshBasicMaterial( { color :0x110000, wireframe: true, wireframeLinewidth: 2 } );
+				var matSolid = new THREE.MeshBasicMaterial( { color :0x330000 } );
+				matSolid.color.setHSV( 0.1, 0.75, 1 );
+
+				floor = new THREE.Mesh( planeSimple, matSolid );
+				floor.position.y = -10;
+				floor.rotation.x = -1.57;
+				floor.scale.set( 25, 25, 25 );
+				scene.addObject( floor );
+
+				floor = new THREE.Mesh( planeTesselated, matWire );
+				floor.rotation.x = -1.57;
+				floor.scale.set( 25, 25, 25 );
+				scene.addObject( floor );
+
+				renderer = new THREE.WebGLRenderer( { clearColor: 0xffffff, clearAlpha: 1 } );
+				renderer.setSize( window.innerWidth, height );
+				renderer.setClearColor( scene.fog.color, 1 );
+				renderer.sortObjects = false;
+
+				container.appendChild( renderer.domElement );
+
+				stats = new Stats();
+				stats.domElement.style.position = 'absolute';
+				stats.domElement.style.top = '0px';
+				container.appendChild( stats.domElement );
+
+				document.addEventListener( 'mousemove', onDocumentMouseMove, false );
+				document.addEventListener( 'click', startAnimation, false );
+
+				var loader = new THREE.JSONLoader();
+				loader.load( { model: "obj/buffalo/buffalo.js", callback: createScene } );
+
+				loop();
+
+			}
+
+			function createScene( geometry ) {
+
+				buffalos = [];
+				animations = [];
+
+				var x, y,
+					buffalo, animation,
+					gridx = 25, gridz = 15,
+					sepx  = 150, sepz = 300;
+
+				var material = new THREE.MeshFaceMaterial();
+
+				var originalMaterial = geometry.materials[ 0 ][ 0 ];
+
+				originalMaterial.skinning = true;
+				originalMaterial.transparent = true;
+				originalMaterial.alphaTest = 0.75;
+
+				THREE.AnimationHandler.add( geometry.animation );
+
+				for( x = 0; x < gridx; x ++ ) {
+
+					for( z = 0; z < gridz; z ++ ) {
+
+						buffalo = new THREE.SkinnedMesh( geometry, material );
+
+						//buffalo.doubleSided = true;
+
+						buffalo.position.x = - ( gridx - 1 ) * sepx * 0.5 + x * sepx + Math.random() * 0.5 * sepx;
+						buffalo.position.z = - ( gridz - 1 ) * sepz * 0.5 + z * sepz + Math.random() * 0.5 * sepz - 500;
+
+						buffalo.position.y = buffalo.boundRadius * 0.5;
+						buffalo.rotation.y = 0.2 - Math.random() * 0.4;
+
+						scene.addObject( buffalo );
+
+						buffalos.push( buffalo );
+
+						animation = new THREE.Animation( buffalo, "take_001" );
+						animations.push( animation );
+
+						offset.push( Math.random() );
+
+					}
+
+				}
+
+			}
+
+			function startAnimation() {
+
+				for( var i = 0; i < animations.length; i ++ ) {
+
+					animations[ i ].offset = 0.05 * Math.random();
+					animations[ i ].play();
+
+				}
+
+				dz = dstep;
+				playback = true;
+
+			}
+
+
+			function onDocumentMouseMove( event ) {
+
+				mouseX = ( event.clientX - windowHalfX );
+				mouseY = ( event.clientY - windowHalfY );
+
+			}
+
+			var oldTime = new Date().getTime();
+
+			function loop() {
+
+				requestAnimationFrame( loop, renderer.domElement );
+
+				var time = new Date().getTime();
+
+				THREE.AnimationHandler.update( 0.001 * ( time - oldTime ) );
+
+				oldTime = time;
+
+				camera.position.x += ( mouseX - camera.position.x ) * 0.05;
+				//camera.position.y += ( - mouseY - camera.position.y ) * 0.05;
+
+				if ( buffalos && playback ) {
+
+					camera.position.z += 2 * Math.sin( new Date().getTime() * 0.001 );
+
+					for( i = 0; i < buffalos.length; i++ ) {
+
+						buffalos[ i ].position.z += 2 * Math.sin( new Date().getTime() * 0.001  + offset[ i ] );
+
+					}
+
+				}
+
+				floor.position.z += dz;
+				if( floor.position.z < -500 ) floor.position.z = 0;
+
+
+				renderer.render( scene, camera );
+
+				stats.update();
+
+			}
+
+		</script>
+
+	</body>
+</html>
+

Niektoré súbory nie sú zobrazené, pretože je v týchto rozdielových dátach zmenené mnoho súborov