README.md 16.8 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)

8
The aim of this project is to create a lightweight 3D engine with a very low level of abstraction (aka for dummies). Currently there is no documentation available but feel free to use the examples as a reference and/or read the source code. However, be aware that the API may change from revision to revision breaking compatibility.
9

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

M
Mr.doob 已提交
12 13
[More info...](http://mrdoob.com/blog/post/693)

M
Mr.doob 已提交
14 15
Other <canvas> based engines: [pre3d](http://deanm.github.com/pre3d/), [pvjs](http://code.google.com/p/pvjswebgl/), [jsgl](http://tulrich.com/geekstuff/canvas/perspective.html), [k3d](http://www.kevs3d.co.uk/dev/canvask3d/k3d_test.html), ...
WebGL based: [WebGLU](https://github.com/OneGeek/WebGLU), [GLGE](http://www.glge.org/), [C3DL](http://www.c3dl.org/), [Copperlicht](http://www.ambiera.com/copperlicht/), [SpiderGL](http://spidergl.org/), [SceneJS](http://scenejs.org/), ...
M
Mr.doob 已提交
16

M
Mr.doob 已提交
17
### Examples ###
M
Mr.doob 已提交
18

19
[![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)
M
Mr.doob 已提交
20
[![interactive_cubes](http://mrdoob.github.com/three.js/assets/examples/11_interactive.png)](http://mrdoob.github.com/three.js/examples/interactive_cubes.html)
M
Mr.doob 已提交
21
[![camera_ortographic](http://mrdoob.github.com/three.js/assets/examples/10_orthographic.png)](http://mrdoob.github.com/three.js/examples/camera_orthographic.html)
M
Mr.doob 已提交
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
[![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)
[![geometry_vr](http://mrdoob.github.com/three.js/assets/examples/04_vr.png)](http://mrdoob.github.com/three.js/examples/geometry_vr.html)
[![geometry_cube](http://mrdoob.github.com/three.js/assets/examples/03_cube.png)](http://mrdoob.github.com/three.js/examples/geometry_cube.html)
P
pyrotechnick 已提交
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Materials

[![materials](http://mrdoob.github.com/three.js/assets/examples/13_materials.png)](http://mrdoob.github.com/three.js/examples/materials.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_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_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_depth](http://mrdoob.github.com/three.js/assets/examples/19_materials_depth.png)](http://mrdoob.github.com/three.js/examples/materials_depth.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_multimaterials](http://mrdoob.github.com/three.js/assets/examples/21_materials_multimaterials.png)](http://mrdoob.github.com/three.js/examples/materials_multimaterials.html)
[![materials_normal](http://mrdoob.github.com/three.js/assets/examples/22_materials_normal.png)](http://mrdoob.github.com/three.js/examples/materials_normal.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)
[![materials_video](http://mrdoob.github.com/three.js/assets/examples/24_materials_video.png)](http://mrdoob.github.com/three.js/examples/materials_video.html)
43
[![materials_cars](http://mrdoob.github.com/three.js/assets/examples/25_materials_cars.png)](http://mrdoob.github.com/three.js/examples/materials_cars.html)
P
pyrotechnick 已提交
44 45 46

Particles

M
Mr.doob 已提交
47 48 49
[![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 已提交
50

51 52
### Featured projects ###

M
Mr.doob 已提交
53
[![Voxels](http://mrdoob.github.com/three.js/assets/projects/10_voxels.png)](http://mrdoob.com/projects/voxels/)
M
Mr.doob 已提交
54
[![The Wilderness Downtown](http://mrdoob.github.com/three.js/assets/projects/09_arcadefire.png)](http://thewildernessdowntown.com/)
M
Mr.doob 已提交
55
[![CloudSCAD](http://mrdoob.github.com/three.js/assets/projects/08_cloudscad.png)](http://cloudscad.com/stl_viewer/)
56
[![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 已提交
57 58 59 60 61 62 63
[![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 已提交
64

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

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

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

M
Mr.doob 已提交
71
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 已提交
72 73 74 75

	<script type="text/javascript">

		var camera, scene, renderer;
76

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

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

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

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

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

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

M
Mr.doob 已提交
96 97
			}

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

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

103 104
		}

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

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

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

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

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

M
Mr.doob 已提交
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 145 146 147 148 149 150 151 152 153 154 155 156 157
	<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>
	<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/RenderableFace4.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 已提交
158

159

160
### Change Log ###
161

M
Mr.doob 已提交
162 163 164
2010 11 17 - **r29** (69.563 kb)

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


170
2010 11 04 - **r28** (62.802 kb)
171

172
* `Loader` class allows load geometry asynchronously at runtime. ([alteredq](http://github.com/alteredq))
M
Mr.doob 已提交
173
* `MeshPhongMaterial` working with `WebGLRenderer`. ([alteredq](http://github.com/alteredq))
174 175
* 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)
176
* Fixed `Projector` z-sorting (not as jumpy anymore).
177 178
* Fixed Orthographic projection (was y-inverted).
* Hmmm.. lib file size starting to get too big...
179

M
Mr.doob 已提交
180

181 182 183 184 185 186 187 188 189
2010 10 28 - **r25** (54.480 kb)

* `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 已提交
190 191 192 193 194 195 196 197
2010 10 06 - **r18** (44.420 kb)

* 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 已提交
198
2010 09 17 - **r17** (39.487 kb)
M
Mr.doob 已提交
199 200 201

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


205 206 207 208 209 210
2010 08 21 - **r16** (35.592 kb)

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


211 212 213 214 215 216 217 218 219
2010 07 23 - **r15** (32.440 kb)

* 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 已提交
220
2010 07 17 - **r14** (32.144 kb)
221 222 223 224 225 226 227 228 229 230 231 232 233

* 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


234
2010 07 12 - **r13** (29.492 kb)
235 236 237 238

* Added `ParticleCircleMaterial` and `ParticleBitmapMaterial`
* `Particle` now use `ParticleCircleMaterial` instead of `ColorFillMaterial`
* `Particle.size` > `Particle.scale.x` and `Particle.scale.y`
239
* `Particle.rotation.z` for rotating the particle
240 241 242
* `SVGRenderer` currently out of sync


243 244
2010 07 07 - **r12** (28.494 kb)

245 246 247
* 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
248 249


M
Mr.doob 已提交
250 251 252
2010 07 03 - **r11** (23.541 kb)

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


257
2010 06 22 - **r10** (23.959 kb)
258 259

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


263
2010 06 20 - **r9** (23.753 kb)
M
Mr.doob 已提交
264

265
* JSLinted.
266
* `autoClear` property for renderers.
M
Mr.doob 已提交
267
* Removed SVG rgba() workaround for WebKit. (WebKit now supports it)
268
* Fixed matrix bug. (transformed objects outside the x axis would get infinitely tall :S)
M
Mr.doob 已提交
269 270 271


2010 06 06 - **r8** (23.496 kb)
272

273 274 275
* Moved UVs to `Geometry`.
* `CanvasRenderer` expands screen space points (workaround for antialias gaps).
* `CanvasRenderer` supports `BitmapUVMappingMaterial`.
276 277


M
Mr.doob 已提交
278
2010 06 05 - **r7** (22.387 kb)
M
Mr.doob 已提交
279

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


285 286
2010 05 17 - **r6** (21.003 kb)

287 288
* 2d clipping on `CanvasRenderer` and `SVGRenderer`
* `clearRect` optimisations on `CanvasRenderer`
289 290


M
Mr.doob 已提交
291
2010 05 16 - **r5** (19.026 kb)
M
Mr.doob 已提交
292 293

* Removed Class.js dependency
294 295 296 297 298
* Added `THREE` namespace
* `Camera.x` -> `Camera.position.x`
* `Camera.target.x` > `Camera.target.position.x`
* `ColorMaterial` > `ColorFillMaterial`
* `FaceColorMaterial` > `FaceColorFillMaterial`
M
Mr.doob 已提交
299
* Materials are now multipass (use array)
300 301
* Added `ColorStrokeMaterial` and `FaceColorStrokeMaterial`
* `geometry.faces.a` are now indexes instead of references
M
Mr.doob 已提交
302 303


304 305
2010 04 26 - **r4** (16.274 kb)

306 307
* `SVGRenderer` Particle rendering
* `CanvasRenderer` uses `context.setTransform` to avoid extra calculations
308 309


M
Mr.doob 已提交
310
2010 04 24 - **r3** (16.392 kb)
M
Mr.doob 已提交
311 312

* Fixed incorrect rotation matrix transforms
313
* Added `Plane` and `Cube` primitives
M
Mr.doob 已提交
314 315 316


2010 04 24 - **r2** (15.724 kb)
M
Mr.doob 已提交
317

318
* Improved `Color` handling
M
Mr.doob 已提交
319

M
Mr.doob 已提交
320 321

2010 04 24 - **r1** (15.25 kb)
M
Mr.doob 已提交
322

P
pyrotechnick 已提交
323
* First alpha release