webgl_loader_collada.html 4.4 KB
Newer Older
M
Mr.doob 已提交
1
<!DOCTYPE html>
T
timk 已提交
2 3 4 5
<html lang="en">
	<head>
		<title>three.js webgl - collada</title>
		<meta charset="utf-8">
M
Mr.doob 已提交
6
		<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
M
Mr.doob 已提交
7
		<style>
T
timk 已提交
8 9
			body {
				font-family: Monospace;
T
timk 已提交
10
				background-color: #000000;
T
timk 已提交
11 12 13
				margin: 0px;
				overflow: hidden;
			}
A
alteredq 已提交
14 15 16 17 18 19 20 21 22 23 24 25 26

			#info {
				color: #fff;
				position: absolute;
				top: 10px;
				width: 100%;
				text-align: center;
				z-index: 100;
				display:block;

			}

			a { color: skyblue }
T
timk 已提交
27 28 29
		</style>
	</head>
	<body>
A
alteredq 已提交
30
		<div id="info">
M
Mr.doob 已提交
31
			<a href="http://threejs.org" target="_blank">three.js</a> -
A
alteredq 已提交
32 33 34
			monster by <a href="http://www.3drt.com/downloads.htm" target="_blank">3drt</a>
		</div>

35
		<script src="../build/three.min.js"></script>
T
timk 已提交
36

37 38
		<script src="js/loaders/ColladaLoader.js"></script>

M
Mr.doob 已提交
39
		<script src="js/Detector.js"></script>
40
		<script src="js/libs/stats.min.js"></script>
41

M
Mr.doob 已提交
42
		<script>
T
timk 已提交
43 44 45 46 47 48

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

			var container, stats;

			var camera, scene, renderer, objects;
49
			var particleLight;
M
Mr.doob 已提交
50
			var dae;
51

52
			var loader = new THREE.ColladaLoader();
53
			loader.options.convertUpAxis = true;
54
			loader.load( './models/collada/monster/monster.dae', function ( collada ) {
55

T
timk 已提交
56
				dae = collada.scene;
M
Mr.doob 已提交
57 58 59 60 61

				dae.traverse( function ( child ) {

					if ( child instanceof THREE.SkinnedMesh ) {

62
						var animation = new THREE.Animation( child, child.geometry.animation );
M
Mr.doob 已提交
63 64 65 66 67
						animation.play();

					}

				} );
T
timk 已提交
68 69

				dae.scale.x = dae.scale.y = dae.scale.z = 0.002;
T
timk 已提交
70 71 72 73
				dae.updateMatrix();

				init();
				animate();
74

M
Mr.doob 已提交
75
			} );
76

T
timk 已提交
77
			function init() {
78 79 80

				container = document.createElement( 'div' );
				document.body.appendChild( container );
T
timk 已提交
81

82 83
				camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 1, 2000 );
				camera.position.set( 2, 2, 3 );
84 85

				scene = new THREE.Scene();
T
timk 已提交
86 87 88

				// Grid

M
Mr.doob 已提交
89
				var size = 14, step = 1;
T
timk 已提交
90

M
Mr.doob 已提交
91
				var geometry = new THREE.Geometry();
92
				var material = new THREE.LineBasicMaterial( { color: 0x303030 } );
T
timk 已提交
93

M
Mr.doob 已提交
94
				for ( var i = - size; i <= size; i += step ) {
T
timk 已提交
95

M
Mr.doob 已提交
96 97 98 99 100
					geometry.vertices.push( new THREE.Vector3( - size, - 0.04, i ) );
					geometry.vertices.push( new THREE.Vector3(   size, - 0.04, i ) );

					geometry.vertices.push( new THREE.Vector3( i, - 0.04, - size ) );
					geometry.vertices.push( new THREE.Vector3( i, - 0.04,   size ) );
T
timk 已提交
101 102 103

				}

M
Mr.doob 已提交
104
				var line = new THREE.SegmentsLine( geometry, material );
105
				scene.add( line );
106

T
timk 已提交
107
				// Add the COLLADA
108

109
				scene.add( dae );
T
timk 已提交
110 111

				particleLight = new THREE.Mesh( new THREE.SphereGeometry( 4, 8, 8 ), new THREE.MeshBasicMaterial( { color: 0xffffff } ) );
112
				scene.add( particleLight );
T
timk 已提交
113 114 115

				// Lights

116
				scene.add( new THREE.AmbientLight( 0xcccccc ) );
T
timk 已提交
117

118
				var directionalLight = new THREE.DirectionalLight(/*Math.random() * 0xffffff*/0xeeeeee );
T
timk 已提交
119 120 121 122
				directionalLight.position.x = Math.random() - 0.5;
				directionalLight.position.y = Math.random() - 0.5;
				directionalLight.position.z = Math.random() - 0.5;
				directionalLight.position.normalize();
123
				scene.add( directionalLight );
T
timk 已提交
124

125 126
				var pointLight = new THREE.PointLight( 0xffffff, 4 );
				particleLight.add( pointLight );
T
timk 已提交
127 128

				renderer = new THREE.WebGLRenderer();
129
				renderer.setPixelRatio( window.devicePixelRatio );
T
timk 已提交
130 131 132 133 134 135 136 137
				renderer.setSize( window.innerWidth, window.innerHeight );
				container.appendChild( renderer.domElement );

				stats = new Stats();
				stats.domElement.style.position = 'absolute';
				stats.domElement.style.top = '0px';
				container.appendChild( stats.domElement );

138 139 140 141 142 143 144 145 146 147 148 149 150
				//

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

			}

			function onWindowResize() {

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

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

T
timk 已提交
151 152 153
			}

			//
154

T
timk 已提交
155 156 157
			function animate() {

				requestAnimationFrame( animate );
158

T
timk 已提交
159 160 161 162 163
				render();
				stats.update();

			}

M
Mr.doob 已提交
164 165
			var clock = new THREE.Clock();

T
timk 已提交
166 167
			function render() {

168
				var timer = Date.now() * 0.0005;
T
timk 已提交
169 170

				camera.position.x = Math.cos( timer ) * 10;
T
timk 已提交
171
				camera.position.y = 2;
T
timk 已提交
172 173
				camera.position.z = Math.sin( timer ) * 10;

174 175
				camera.lookAt( scene.position );

T
hmm  
timk 已提交
176 177 178
				particleLight.position.x = Math.sin( timer * 4 ) * 3009;
				particleLight.position.y = Math.cos( timer * 5 ) * 4000;
				particleLight.position.z = Math.cos( timer * 4 ) * 3009;
T
timk 已提交
179

M
Mr.doob 已提交
180 181
				THREE.AnimationHandler.update( clock.getDelta() );

T
timk 已提交
182 183 184 185 186 187 188
				renderer.render( scene, camera );

			}

		</script>
	</body>
</html>