README.md 14.7 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 28 29 30 31
[![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)
[![materials_video](http://mrdoob.github.com/three.js/assets/examples/05_video.png)](http://mrdoob.github.com/three.js/examples/materials_video.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)
[![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 已提交
32

33 34
### Featured projects ###

M
Mr.doob 已提交
35
[![Voxels](http://mrdoob.github.com/three.js/assets/projects/10_voxels.png)](http://mrdoob.com/projects/voxels/)
M
Mr.doob 已提交
36
[![The Wilderness Downtown](http://mrdoob.github.com/three.js/assets/projects/09_arcadefire.png)](http://thewildernessdowntown.com/)
M
Mr.doob 已提交
37
[![CloudSCAD](http://mrdoob.github.com/three.js/assets/projects/08_cloudscad.png)](http://cloudscad.com/stl_viewer/)
38
[![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 已提交
39 40 41 42 43 44 45
[![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 已提交
46

M
Mr.doob 已提交
47
### Usage ###
M
Mr.doob 已提交
48

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

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

M
Mr.doob 已提交
53
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 已提交
54 55 56 57

	<script type="text/javascript">

		var camera, scene, renderer;
58

M
Mr.doob 已提交
59
		init();
60
		setInterval( loop, 1000 / 60 );
M
Mr.doob 已提交
61

M
Mr.doob 已提交
62
		function init() {
M
Mr.doob 已提交
63

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

M
Mr.doob 已提交
67
			scene = new THREE.Scene();
M
Mr.doob 已提交
68

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

M
Mr.doob 已提交
71
				var particle = new THREE.Particle( new THREE.ParticleCircleMaterial( { color: Math.random() * 0x808008 + 0x808080 } ) );
M
Mr.doob 已提交
72 73 74
				particle.position.x = Math.random() * 2000 - 1000;
				particle.position.y = Math.random() * 2000 - 1000;
				particle.position.z = Math.random() * 2000 - 1000;
M
Mr.doob 已提交
75
				particle.scale.x = particle.scale.y = Math.random() * 10 + 5;
M
Mr.doob 已提交
76
				scene.addObject( particle );
M
Mr.doob 已提交
77

M
Mr.doob 已提交
78 79
			}

M
Mr.doob 已提交
80 81 82
			renderer = new THREE.CanvasRenderer();
			renderer.setSize( window.innerWidth, window.innerHeight );

83
			document.body.appendChild( renderer.domElement );
M
Mr.doob 已提交
84

85 86
		}

M
Mr.doob 已提交
87
		function loop() {
M
Mr.doob 已提交
88

89
			renderer.render( scene, camera );
M
Mr.doob 已提交
90

M
Mr.doob 已提交
91
		}
M
Mr.doob 已提交
92

M
Mr.doob 已提交
93
	</script>
94

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

M
Mr.doob 已提交
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 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
	<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 已提交
140

141

142
### Change Log ###
143

M
Mr.doob 已提交
144 145 146
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))
147
* Line clipping in `CanvasRenderer` ([julianwa](http://github.com/julianwa))
M
Mr.doob 已提交
148 149 150 151
* Refactored `CanvasRenderer` and `SVGRenderer`. ([mrdoob](http://github.com/mrdoob))
* Switched to Closure compiler.


152
2010 11 04 - **r28** (62.802 kb)
153

154
* `Loader` class allows load geometry asynchronously at runtime. ([alteredq](http://github.com/alteredq))
M
Mr.doob 已提交
155
* `MeshPhongMaterial` working with `WebGLRenderer`. ([alteredq](http://github.com/alteredq))
156 157
* 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)
158
* Fixed `Projector` z-sorting (not as jumpy anymore).
159 160
* Fixed Orthographic projection (was y-inverted).
* Hmmm.. lib file size starting to get too big...
161

M
Mr.doob 已提交
162

163 164 165 166 167 168 169 170 171
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 已提交
172 173 174 175 176 177 178 179
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 已提交
180
2010 09 17 - **r17** (39.487 kb)
M
Mr.doob 已提交
181 182 183

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


187 188 189 190 191 192
2010 08 21 - **r16** (35.592 kb)

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


193 194 195 196 197 198 199 200 201
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 已提交
202
2010 07 17 - **r14** (32.144 kb)
203 204 205 206 207 208 209 210 211 212 213 214 215

* 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


216
2010 07 12 - **r13** (29.492 kb)
217 218 219 220

* Added `ParticleCircleMaterial` and `ParticleBitmapMaterial`
* `Particle` now use `ParticleCircleMaterial` instead of `ColorFillMaterial`
* `Particle.size` > `Particle.scale.x` and `Particle.scale.y`
221
* `Particle.rotation.z` for rotating the particle
222 223 224
* `SVGRenderer` currently out of sync


225 226
2010 07 07 - **r12** (28.494 kb)

227 228 229
* 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
230 231


M
Mr.doob 已提交
232 233 234
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))
235 236
* `Scene.add` > `Scene.addObject`
* Enabled `Scene.removeObject`
M
Mr.doob 已提交
237 238


239
2010 06 22 - **r10** (23.959 kb)
240 241

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


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

247
* JSLinted.
248
* `autoClear` property for renderers.
M
Mr.doob 已提交
249
* Removed SVG rgba() workaround for WebKit. (WebKit now supports it)
250
* Fixed matrix bug. (transformed objects outside the x axis would get infinitely tall :S)
M
Mr.doob 已提交
251 252 253


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

255 256 257
* Moved UVs to `Geometry`.
* `CanvasRenderer` expands screen space points (workaround for antialias gaps).
* `CanvasRenderer` supports `BitmapUVMappingMaterial`.
258 259


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

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


267 268
2010 05 17 - **r6** (21.003 kb)

269 270
* 2d clipping on `CanvasRenderer` and `SVGRenderer`
* `clearRect` optimisations on `CanvasRenderer`
271 272


M
Mr.doob 已提交
273
2010 05 16 - **r5** (19.026 kb)
M
Mr.doob 已提交
274 275

* Removed Class.js dependency
276 277 278 279 280
* Added `THREE` namespace
* `Camera.x` -> `Camera.position.x`
* `Camera.target.x` > `Camera.target.position.x`
* `ColorMaterial` > `ColorFillMaterial`
* `FaceColorMaterial` > `FaceColorFillMaterial`
M
Mr.doob 已提交
281
* Materials are now multipass (use array)
282 283
* Added `ColorStrokeMaterial` and `FaceColorStrokeMaterial`
* `geometry.faces.a` are now indexes instead of references
M
Mr.doob 已提交
284 285


286 287
2010 04 26 - **r4** (16.274 kb)

288 289
* `SVGRenderer` Particle rendering
* `CanvasRenderer` uses `context.setTransform` to avoid extra calculations
290 291


M
Mr.doob 已提交
292
2010 04 24 - **r3** (16.392 kb)
M
Mr.doob 已提交
293 294

* Fixed incorrect rotation matrix transforms
295
* Added `Plane` and `Cube` primitives
M
Mr.doob 已提交
296 297 298


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

300
* Improved `Color` handling
M
Mr.doob 已提交
301

M
Mr.doob 已提交
302 303

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

* First alpha release