README.md 17.2 KB
Newer Older
M
testing  
Mr.doob 已提交
1 2 3
three.js
========

M
Mr.doob 已提交
4
#### Javascript 3D Engine ####
M
Mr.doob 已提交
5

M
r5  
Mr.doob 已提交
6 7
[![Flattr this](http://api.flattr.com/button/button-compact-static-100x17.png)](http://flattr.com/thing/287/three-js)

M
Mr.doob 已提交
8
The aim of this project is to create a lightweight 3D engine with a very low level of abstraction (aka for dummies). Currently the examples are the documentation. Be aware that the API may change from revision to revision breaking backwards compatibility.
9

M
Mr.doob 已提交
10
The engine can render using <canvas>, <svg> and WebGL.
M
Mr.doob 已提交
11

12 13
More? irc.freenode.net #three.js

M
Mr.doob 已提交
14
### Examples ###
M
Mr.doob 已提交
15

16 17 18
#### Canvas ####

[![materials_reflection](http://mrdoob.github.com/three.js/assets/examples/27_materials_reflection.png)](http://mrdoob.github.com/three.js/examples/materials_reflection.html)
M
Mr.doob 已提交
19 20
[![materials](http://mrdoob.github.com/three.js/assets/examples/13_materials.png)](http://mrdoob.github.com/three.js/examples/materials.html)
[![materials_depth](http://mrdoob.github.com/three.js/assets/examples/19_materials_depth.png)](http://mrdoob.github.com/three.js/examples/materials_depth.html)
P
pyrotechnick 已提交
21
[![materials_normal](http://mrdoob.github.com/three.js/assets/examples/22_materials_normal.png)](http://mrdoob.github.com/three.js/examples/materials_normal.html)
22
[![lights_pointlights](http://mrdoob.github.com/three.js/assets/examples/09_walthead.png)](http://mrdoob.github.com/three.js/examples/lights_pointlights.html)
M
Mr.doob 已提交
23 24 25 26 27
[![interactive_cubes](http://mrdoob.github.com/three.js/assets/examples/11_interactive.png)](http://mrdoob.github.com/three.js/examples/interactive_cubes.html)
[![camera_ortographic](http://mrdoob.github.com/three.js/assets/examples/10_orthographic.png)](http://mrdoob.github.com/three.js/examples/camera_orthographic.html)
[![geometry_birds](http://mrdoob.github.com/three.js/assets/examples/08_birds.png)](http://mrdoob.github.com/three.js/examples/geometry_birds.html)
[![geometry_earth](http://mrdoob.github.com/three.js/assets/examples/07_earth.png)](http://mrdoob.github.com/three.js/examples/geometry_earth.html)
[![geometry_terrain](http://mrdoob.github.com/three.js/assets/examples/06_terrain.png)](http://mrdoob.github.com/three.js/examples/geometry_terrain.html)
28
[![materials_video](http://mrdoob.github.com/three.js/assets/examples/24_materials_video.png)](http://mrdoob.github.com/three.js/examples/materials_video.html)
29
[![geometry_panorama](http://mrdoob.github.com/three.js/assets/examples/04_vr.png)](http://mrdoob.github.com/three.js/examples/geometry_panorama.html)
M
Mr.doob 已提交
30 31
[![geometry_cube](http://mrdoob.github.com/three.js/assets/examples/03_cube.png)](http://mrdoob.github.com/three.js/examples/geometry_cube.html)
[![particles_sprites](http://mrdoob.github.com/three.js/assets/examples/26_particles_sprites.png)](http://mrdoob.github.com/three.js/examples/particles_sprites.html)
M
Mr.doob 已提交
32 33 34
[![particles_random](http://mrdoob.github.com/three.js/assets/examples/02_random.png)](http://mrdoob.github.com/three.js/examples/particles_random.html)
[![particles_wave](http://mrdoob.github.com/three.js/assets/examples/01_waves.png)](http://mrdoob.github.com/three.js/examples/particles_waves.html)
[![particles_floor](http://mrdoob.github.com/three.js/assets/examples/00_floor.png)](http://mrdoob.github.com/three.js/examples/particles_floor.html)
M
Mr.doob 已提交
35

36 37
#### WebGL ####

38
[![materials_shader_fresnel](http://mrdoob.github.com/three.js/assets/examples/28_materials_shaders_fresnel.png)](http://mrdoob.github.com/three.js/examples/materials_shaders_fresnel.html)
39 40 41 42 43 44 45 46 47 48 49
[![materials_cars](http://mrdoob.github.com/three.js/assets/examples/25_materials_cars.png)](http://mrdoob.github.com/three.js/examples/materials_cars.html)
[![materials_cubemap_refraction](http://mrdoob.github.com/three.js/assets/examples/18_materials_cubemap_refraction.png)](http://mrdoob.github.com/three.js/examples/materials_cubemap_refraction.html)
[![materials_cubemap_balls_reflection](http://mrdoob.github.com/three.js/assets/examples/15_materials_cubemap_balls_reflection.png)](http://mrdoob.github.com/three.js/examples/materials_cubemap_balls_reflection.html)
[![materials_cubemap_balls_refraction](http://mrdoob.github.com/three.js/assets/examples/16_materials_cubemap_balls_refraction.png)](http://mrdoob.github.com/three.js/examples/materials_cubemap_balls_refraction.html)
[![materials_cubemap_escher](http://mrdoob.github.com/three.js/assets/examples/17_materials_cubemap_escher.png)](http://mrdoob.github.com/three.js/examples/materials_cubemap_escher.html)
[![materials_cubemap](http://mrdoob.github.com/three.js/assets/examples/14_materials_cubemap.png)](http://mrdoob.github.com/three.js/examples/materials_cubemap.html)
[![materials_gl](http://mrdoob.github.com/three.js/assets/examples/20_materials_gl.png)](http://mrdoob.github.com/three.js/examples/materials_gl.html)
[![materials_shaders](http://mrdoob.github.com/three.js/assets/examples/23_materials_shaders.png)](http://mrdoob.github.com/three.js/examples/materials_shaders.html)
[![large_mesh](http://mrdoob.github.com/three.js/assets/examples/12_large_mesh.png)](http://mrdoob.github.com/three.js/examples/geometry_large_mesh.html)


50 51
### Featured projects ###

M
Mr.doob 已提交
52
[![Voxels](http://mrdoob.github.com/three.js/assets/projects/10_voxels.png)](http://mrdoob.com/projects/voxels/)
M
Mr.doob 已提交
53
[![The Wilderness Downtown](http://mrdoob.github.com/three.js/assets/projects/09_arcadefire.png)](http://thewildernessdowntown.com/)
M
Mr.doob 已提交
54
[![CloudSCAD](http://mrdoob.github.com/three.js/assets/projects/08_cloudscad.png)](http://cloudscad.com/stl_viewer/)
55
[![Or so they say...](http://mrdoob.github.com/three.js/assets/projects/07_orsotheysay.png)](http://xplsv.com/prods/demos/xplsv_orsotheysay/)
M
Mr.doob 已提交
56 57 58 59 60 61 62
[![Rat](http://mrdoob.github.com/three.js/assets/projects/06_rat.png)](http://tech.lab212.org/2010/07/export-textured-models-from-blender2-5-to-three-js/)
[![Failure](http://mrdoob.github.com/three.js/assets/projects/05_failure.png)](http://www.is-real.net/experiments/three/failure/)
[![Space Cannon 3D](http://mrdoob.github.com/three.js/assets/projects/02_spacecannon.png)](http://labs.brian-stoner.com/spacecannon/)
[![Alocasia](http://mrdoob.github.com/three.js/assets/projects/04_alocasia.png)](http://arithmetric.com/projects/alocasia/)
[![DDD](http://mrdoob.github.com/three.js/assets/projects/01_ddd.png)](http://the389.com/works/three/)
[![jsflowfield4d](http://mrdoob.github.com/three.js/assets/projects/00_jsflowfield4d.png)](http://test.sjeiti.com/jsflowfield4d/)
[![spikeball](http://mrdoob.github.com/three.js/assets/projects/03_spikeball.png)](http://kile.stravaganza.org/lab/js/spikeball/)
M
Mr.doob 已提交
63

M
Mr.doob 已提交
64
### Usage ###
M
Mr.doob 已提交
65

M
Mr.doob 已提交
66
Download the [minified library](http://mrdoob.github.com/three.js/build/Three.js) and include it in your html.
M
Mr.doob 已提交
67

68
	<script type="text/javascript" src="js/Three.js"></script>
M
Mr.doob 已提交
69

M
Mr.doob 已提交
70
This code creates a camera, then creates a scene object, adds a bunch of random particles in it, creates a &lt;canvas&gt; renderer and adds its viewport in the document.body element.
M
Mr.doob 已提交
71 72 73 74

	<script type="text/javascript">

		var camera, scene, renderer;
75

M
Mr.doob 已提交
76
		init();
77
		setInterval( loop, 1000 / 60 );
M
Mr.doob 已提交
78

M
Mr.doob 已提交
79
		function init() {
M
Mr.doob 已提交
80

81
			camera = new THREE.Camera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
82
			camera.position.z = 1000;
M
Mr.doob 已提交
83

M
Mr.doob 已提交
84
			scene = new THREE.Scene();
M
Mr.doob 已提交
85

M
Mr.doob 已提交
86
			for (var i = 0; i < 1000; i++) {
M
Mr.doob 已提交
87

M
Mr.doob 已提交
88
				var particle = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: Math.random() * 0x808080 + 0x808080 } ) );
M
Mr.doob 已提交
89 90 91
				particle.position.x = Math.random() * 2000 - 1000;
				particle.position.y = Math.random() * 2000 - 1000;
				particle.position.z = Math.random() * 2000 - 1000;
M
Mr.doob 已提交
92
				particle.scale.x = particle.scale.y = Math.random() * 10 + 5;
M
Mr.doob 已提交
93
				scene.addObject( particle );
M
Mr.doob 已提交
94

M
Mr.doob 已提交
95 96
			}

M
Mr.doob 已提交
97 98 99
			renderer = new THREE.CanvasRenderer();
			renderer.setSize( window.innerWidth, window.innerHeight );

100
			document.body.appendChild( renderer.domElement );
M
Mr.doob 已提交
101

102 103
		}

M
Mr.doob 已提交
104
		function loop() {
M
Mr.doob 已提交
105

106
			renderer.render( scene, camera );
M
Mr.doob 已提交
107

M
Mr.doob 已提交
108
		}
M
Mr.doob 已提交
109

M
Mr.doob 已提交
110
	</script>
111

112
For creating a customised version of the library, including the source files in this order would be a good way to start:
113

M
Mr.doob 已提交
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
	<script type="text/javascript" src="../src/Three.js"></script>
	<script type="text/javascript" src="../src/core/Color.js"></script>
	<script type="text/javascript" src="../src/core/Vector2.js"></script>
	<script type="text/javascript" src="../src/core/Vector3.js"></script>
	<script type="text/javascript" src="../src/core/Vector4.js"></script>
	<script type="text/javascript" src="../src/core/Ray.js"></script>
	<script type="text/javascript" src="../src/core/Rectangle.js"></script>
	<script type="text/javascript" src="../src/core/Matrix3.js"></script>
	<script type="text/javascript" src="../src/core/Matrix4.js"></script>
	<script type="text/javascript" src="../src/core/Vertex.js"></script>
	<script type="text/javascript" src="../src/core/Face3.js"></script>
	<script type="text/javascript" src="../src/core/Face4.js"></script>
	<script type="text/javascript" src="../src/core/UV.js"></script>
	<script type="text/javascript" src="../src/core/Geometry.js"></script>
	<script type="text/javascript" src="../src/cameras/Camera.js"></script>
	<script type="text/javascript" src="../src/lights/Light.js"></script>
	<script type="text/javascript" src="../src/lights/AmbientLight.js"></script>
	<script type="text/javascript" src="../src/lights/DirectionalLight.js"></script>
	<script type="text/javascript" src="../src/lights/PointLight.js"></script>
	<script type="text/javascript" src="../src/objects/Object3D.js"></script>
	<script type="text/javascript" src="../src/objects/Mesh.js"></script>
	<script type="text/javascript" src="../src/objects/Particle.js"></script>
	<script type="text/javascript" src="../src/objects/Line.js"></script>
	<script type="text/javascript" src="../src/materials/Material.js"></script>
	<script type="text/javascript" src="../src/materials/LineBasicMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/MeshBasicMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/MeshLambertMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/MeshPhongMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/MeshDepthMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/MeshNormalMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/MeshFaceMaterial.js"></script>
M
Mr.doob 已提交
145
	<script type="text/javascript" src="../src/materials/MeshShaderMaterial.js"></script>
M
Mr.doob 已提交
146 147 148 149 150 151 152 153 154 155 156
	<script type="text/javascript" src="../src/materials/ParticleBasicMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/ParticleCircleMaterial.js"></script>
	<script type="text/javascript" src="../src/materials/textures/Texture.js"></script>
	<script type="text/javascript" src="../src/scenes/Scene.js"></script>
	<script type="text/javascript" src="../src/renderers/Projector.js"></script>
	<script type="text/javascript" src="../src/renderers/CanvasRenderer.js"></script>
	<script type="text/javascript" src="../src/renderers/SVGRenderer.js"></script>
	<script type="text/javascript" src="../src/renderers/WebGLRenderer.js"></script>
	<script type="text/javascript" src="../src/renderers/renderables/RenderableFace3.js"></script>
	<script type="text/javascript" src="../src/renderers/renderables/RenderableParticle.js"></script>
	<script type="text/javascript" src="../src/renderers/renderables/RenderableLine.js"></script>
M
Mr.doob 已提交
157

158

159
### Change Log ###
160

M
Mr.doob 已提交
161
2010 11 30 - **r30** (77.809 KB, gzip: 18.336 KB)
M
Mr.doob 已提交
162

M
Mr.doob 已提交
163
* Reflection and Refraction materials support in `WebGLRenderer` ([alteredq](http://github.com/alteredq))
M
Mr.doob 已提交
164
* `SmoothShading` support on `CanvasRenderer`/`MeshLambertMaterial`
M
Mr.doob 已提交
165
* `MeshShaderMaterial` for `WebGLRenderer` ([alteredq](http://github.com/alteredq))
M
Mr.doob 已提交
166 167 168
* Removed `RenderableFace4` from `Projector`/`CanvasRenderer` (maybe just temporary).
* Added extras folder with `GeometryUtils`, `ImageUtils`, `SceneUtils` and `ShaderUtils` ([alteredq](http://github.com/alteredq) & [mrdoob](http://github.com/mrdoob))
* Blender 2.5x Slim now the default exporter (old exporter removed).
M
Mr.doob 已提交
169 170 171


2010 11 17 - **r29** (69.563 KB)
M
Mr.doob 已提交
172 173

* **New materials API** Still work in progress, but mostly there. ([alteredq](http://github.com/alteredq) & [mrdoob](http://github.com/mrdoob))
174
* Line clipping in `CanvasRenderer` ([julianwa](http://github.com/julianwa))
M
Mr.doob 已提交
175 176 177 178
* Refactored `CanvasRenderer` and `SVGRenderer`. ([mrdoob](http://github.com/mrdoob))
* Switched to Closure compiler.


M
Mr.doob 已提交
179
2010 11 04 - **r28** (62.802 KB)
180

181
* `Loader` class allows load geometry asynchronously at runtime. ([alteredq](http://github.com/alteredq))
M
Mr.doob 已提交
182
* `MeshPhongMaterial` working with `WebGLRenderer`. ([alteredq](http://github.com/alteredq))
183 184
* Support for *huge* objects. Max 500k polys and counting. ([alteredq](http://github.com/alteredq))
* `Projector.unprojectVector` and `Ray` class to check intersections with faces (based on [mindlapse](https://github.com/mindlapse) work)
185
* Fixed `Projector` z-sorting (not as jumpy anymore).
186 187
* Fixed Orthographic projection (was y-inverted).
* Hmmm.. lib file size starting to get too big...
188

M
Mr.doob 已提交
189

M
Mr.doob 已提交
190
2010 10 28 - **r25** (54.480 KB)
191 192 193 194 195 196 197 198

* `WebGLRenderer` now up to date with other renderers! ([alteredq](http://github.com/alteredq))
* .obj to .js python converter ([alteredq](http://github.com/alteredq))
* Blender 2.54 exporter
* Added `MeshFaceMaterial` (multipass per face)
* Reworked `CanvasRenderer` and `SVGRenderer` material handling


M
Mr.doob 已提交
199
2010 10 06 - **r18** (44.420 KB)
M
Mr.doob 已提交
200 201 202 203 204 205 206

* Added `PointLight`
* `CanvasRenderer` and `SVGRenderer` basic lighting support (ColorStroke/ColorFill only)
* `Renderer` > `Projector`. `CanvasRenderer`, `SVGRenderer` and `DOMRenderer` do not extend anymore
* Added `computeCentroids` method to `Geometry`


M
Mr.doob 已提交
207
2010 09 17 - **r17** (39.487 KB)
M
Mr.doob 已提交
208 209 210

* Added `Light`, `AmbientLight` and `DirectionalLight` ([philogb](http://github.com/philogb))
* `WebGLRenderer` basic lighting support ([philogb](http://github.com/philogb))
M
Mr.doob 已提交
211
* Memory optimisations
M
Mr.doob 已提交
212 213


M
Mr.doob 已提交
214
2010 08 21 - **r16** (35.592 KB)
215 216 217 218 219

* Workaround for Opera bug (clearRect not working with context with negative scale)
* Additional `Matrix4` and `Vector3` methods


M
Mr.doob 已提交
220
2010 07 23 - **r15** (32.440 KB)
221 222 223 224 225 226 227 228

* Using new object `UV` instead of `Vector2` where it should be used
* Added `Mesh.flipSided` boolean (false by default)
* `CanvasRenderer` was handling UVs at 1,1 as bitmapWidth, bitmapHeight (instead of bitmapWidth - 1, bitmapHeight - 1)
* `ParticleBitmapMaterial.offset` added
* Fixed gap when rendering `Face4` with `MeshBitmapUVMappingMaterial`


M
Mr.doob 已提交
229
2010 07 17 - **r14** (32.144 KB)
230 231 232 233 234 235 236 237 238 239 240 241 242

* Refactored `CanvasRenderer` (more duplicated code, but easier to handle)
* `Face4` now supports `MeshBitmapUVMappingMaterial`
* Changed order of `*StrokeMaterial` parameters. Now it's `color`, `opacity`, `lineWidth`.
* `BitmapUVMappingMaterial` > `MeshBitmapUVMappingMaterial`
* `ColorFillMaterial` > `MeshColorFillMaterial`
* `ColorStrokeMaterial` > `MeshColorStrokeMaterial`
* `FaceColorFillMaterial` > `MeshFaceColorFillMaterial`
* `FaceColorStrokeMaterial` > `MeshFaceColorStrokeMaterial`
* `ColorStrokeMaterial` > `LineColorMaterial`
* `Rectangle.instersects` returned false with rectangles with 0px witdh or height


M
Mr.doob 已提交
243
2010 07 12 - **r13** (29.492 KB)
244 245 246 247

* Added `ParticleCircleMaterial` and `ParticleBitmapMaterial`
* `Particle` now use `ParticleCircleMaterial` instead of `ColorFillMaterial`
* `Particle.size` > `Particle.scale.x` and `Particle.scale.y`
248
* `Particle.rotation.z` for rotating the particle
249 250 251
* `SVGRenderer` currently out of sync


M
Mr.doob 已提交
252
2010 07 07 - **r12** (28.494 KB)
253

254 255 256
* First version of the `WebGLRenderer` (`ColorFillMaterial` and `FaceColorFillMaterial` by now)
* `Matrix4.lookAt` fix (`CanvasRenderer` and `SVGRenderer` now handle the -Y)
* `Color` now using 0-1 floats instead of 0-255 integers
257 258


M
Mr.doob 已提交
259
2010 07 03 - **r11** (23.541 KB)
M
Mr.doob 已提交
260 261

* Blender 2.5 exporter (utils/export_threejs.py) now exports UV and normals (Thx [kikko](http://github.com/kikko))
262 263
* `Scene.add` > `Scene.addObject`
* Enabled `Scene.removeObject`
M
Mr.doob 已提交
264 265


M
Mr.doob 已提交
266
2010 06 22 - **r10** (23.959 KB)
267 268

* Changed Camera system. (Thx [Paul Brunt](http://github.com/supereggbert))
269
* `Object3D.overdraw = true` to enable CanvasRenderer screen space point expansion hack.
270 271


M
Mr.doob 已提交
272
2010 06 20 - **r9** (23.753 KB)
M
Mr.doob 已提交
273

274
* JSLinted.
275
* `autoClear` property for renderers.
M
Mr.doob 已提交
276
* Removed SVG rgba() workaround for WebKit. (WebKit now supports it)
277
* Fixed matrix bug. (transformed objects outside the x axis would get infinitely tall :S)
M
Mr.doob 已提交
278 279


M
Mr.doob 已提交
280
2010 06 06 - **r8** (23.496 KB)
281

282 283 284
* Moved UVs to `Geometry`.
* `CanvasRenderer` expands screen space points (workaround for antialias gaps).
* `CanvasRenderer` supports `BitmapUVMappingMaterial`.
285 286


M
Mr.doob 已提交
287
2010 06 05 - **r7** (22.387 KB)
M
Mr.doob 已提交
288

289 290
* Added Line Object.
* Workaround for WebKit not supporting rgba() in SVG yet.
291
* No need to call updateMatrix(). Use .autoUpdateMatrix = false if needed. (Thx [Gregory Athons](http://github.com/gregmax17)).
M
Mr.doob 已提交
292 293


M
Mr.doob 已提交
294
2010 05 17 - **r6** (21.003 KB)
295

296 297
* 2d clipping on `CanvasRenderer` and `SVGRenderer`
* `clearRect` optimisations on `CanvasRenderer`
298 299


M
Mr.doob 已提交
300
2010 05 16 - **r5** (19.026 KB)
M
Mr.doob 已提交
301 302

* Removed Class.js dependency
303 304 305 306 307
* Added `THREE` namespace
* `Camera.x` -> `Camera.position.x`
* `Camera.target.x` > `Camera.target.position.x`
* `ColorMaterial` > `ColorFillMaterial`
* `FaceColorMaterial` > `FaceColorFillMaterial`
M
Mr.doob 已提交
308
* Materials are now multipass (use array)
309 310
* Added `ColorStrokeMaterial` and `FaceColorStrokeMaterial`
* `geometry.faces.a` are now indexes instead of references
M
Mr.doob 已提交
311 312


M
Mr.doob 已提交
313
2010 04 26 - **r4** (16.274 KB)
314

315 316
* `SVGRenderer` Particle rendering
* `CanvasRenderer` uses `context.setTransform` to avoid extra calculations
317 318


M
Mr.doob 已提交
319
2010 04 24 - **r3** (16.392 KB)
M
Mr.doob 已提交
320 321

* Fixed incorrect rotation matrix transforms
322
* Added `Plane` and `Cube` primitives
M
Mr.doob 已提交
323 324


M
Mr.doob 已提交
325
2010 04 24 - **r2** (15.724 KB)
M
Mr.doob 已提交
326

327
* Improved `Color` handling
M
Mr.doob 已提交
328

M
Mr.doob 已提交
329

M
Mr.doob 已提交
330
2010 04 24 - **r1** (15.25 KB)
M
Mr.doob 已提交
331

M
Mr.doob 已提交
332
* First alpha release