What is three?
The 'three' npm package is a JavaScript library that provides a wide array of functionalities for creating and displaying 3D graphics in web browsers. It uses WebGL under the hood and provides an easy-to-use API to create 3D scenes, render them, and add various elements like shapes, materials, lights, cameras, and more.
What are three's main functionalities?
Creating a Scene
This code sample demonstrates how to create a new 3D scene using Three.js. A scene is a container that holds all your objects, cameras, and lights.
const scene = new THREE.Scene();
Adding a Mesh
This code sample shows how to create a simple cube mesh with a green color and add it to the scene. A mesh consists of a geometry and a material.
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);
Setting up a Camera
This code sets up a perspective camera with a certain field of view, aspect ratio, and near and far clipping planes. The camera is positioned 5 units away from the origin along the z-axis.
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;
Rendering the Scene
This code sample initializes a WebGL renderer, sets its size, and appends its DOM element to the body of the document. It also defines an animate function that continuously renders the scene using the camera.
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
function animate() {
requestAnimationFrame(animate);
renderer.render(scene, camera);
}
animate();
Adding Lights
This code sample adds a point light to the scene, which emits light in all directions. The light's color, intensity, and distance are set, and its position is placed at coordinates (10, 10, 10).
const light = new THREE.PointLight(0xffffff, 1, 100);
light.position.set(10, 10, 10);
scene.add(light);
Other packages similar to three
babylonjs
Babylon.js is a powerful, beautiful, simple, and open game and rendering engine packed into a friendly JavaScript framework. Similar to Three.js, it allows developers to create 3D content for the web. Babylon.js has a different API and additional features like a physics engine and advanced particle systems.
playcanvas
PlayCanvas is an open-source 3D engine/IDE that is specifically designed for the web. It offers real-time collaboration features and is more focused on game development. It provides an editor for building 3D applications and has a different approach to workflow compared to Three.js.
aframe
A-Frame is a web framework for building virtual reality (VR) experiences. It is built on top of Three.js and abstracts away the complexity of Three.js with a declarative HTML-like syntax. A-Frame is designed for creating VR experiences and is more accessible for web developers who are familiar with HTML and JavaScript.
three.js
JavaScript 3D library
The aim of the project is to create a lightweight 3D library with a very low level of complexity — in other words, for dummies. The library provides <canvas>, <svg>, CSS3D and WebGL renderers.
Examples — Documentation — Migrating — Help
Usage
Download the minified library and include it in your html.
Alternatively see how to build the library yourself.
<script src="js/three.min.js"></script>
This code creates a scene, then creates a camera, adds the camera and cube to the scene, creates a <canvas> renderer and adds its viewport in the document.body element.
<script>
var camera, scene, renderer;
var geometry, material, mesh;
init();
animate();
function init() {
camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );
camera.position.z = 1000;
scene = new THREE.Scene();
geometry = new THREE.CubeGeometry( 200, 200, 200 );
material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
mesh = new THREE.Mesh( geometry, material );
scene.add( mesh );
renderer = new THREE.CanvasRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.body.appendChild( renderer.domElement );
}
function animate() {
requestAnimationFrame( animate );
mesh.rotation.x += 0.01;
mesh.rotation.y += 0.02;
renderer.render( scene, camera );
}
</script>
Change log
2013 04 17 - r58 (411,339 KB, gzip: 97,298 KB)
- Removed
Matrix4
's translate()
, rotateX()
, rotateY()
, rotateZ()
and rotateByAxis()
. (mrdoob) - Documentation improvements. (yurifury, tmcw, deepan2k5, cjshannon and sh0ot1e)
- Improvements to
WebGLRenderer
stable z sorting.(wereHamster and mrdoob) - Lots of progress in
SceneLoader2
and SceneExporter2
, now known as ObjectLoader
and ObjectExporter
. (mrdoob) - Added morphTargets support to
MeshNormalMaterial
. (mrdoob) - Renamed
Matrix4
's extractPosition()
to copyPosition()
. (mrdoob) - Editor now using localStorage for keeping state. (mrdoob and sole)
- Added
MaterialLoader
and MaterialExporter
. (mrdoob) - Renamed
Matrix4
's setRotationFrom*()
to makeRotationFrom*()
. (bhouston) - Added
setGeometry()
and setMaterial()
to Mesh
. (mrdoob) - Editor primitives can now have the parameters updated at any point. (mrdoob)
- Renamed
Matrix4
's compose()
to makeFromPositionQuaternionScale()
and added makeFromPositionEulerScale()
. (bhouston) - Added
rotateOnAxis()
and translateOnAxis()
to Object3D
. (WestLangley) - Removed
Matrix4
's crossVector()
. (WestLangley) - Added
PLYLoader
(ASCII files). (menway) - Added new
BokehShader2
. (zz85) - Replaced recursive calls in
PolyhedronGeometry
with an analytical construction of the geometry. (bhickey) - Renamed
Object3D
's getChildByName()
to getObjectByName()
and added getObjectById()
. (mrdoob) - Add
materialOffset
parameter to GeometryUtils
's merge()
. (tapio) - Now using prototype based
EventDispatcher
. (mrdoob) - Added
linewidth
to ShaderMaterial
. (mrdoob) LOD
support in Raycaster
. (mrdoob)- Added lights support to
ColladaLoader
. (mrdoob) - Started
WebGLRenderer3
. Aiming to find better solutions for the WebGL layer. (mrdoob) - Optimized the PCF shadow map filtering to use vector comparisons. (MiiBond)
SoftwareRenderer
now handles color changes at runtime. (mrdoob)- Added
BoxHelper
. (mrdoob) - Removed
setClearColorHex()
, parameters.clearColor
and parameters.clearAlpha
. (mrdoob) - Refactored
CameraHelper
. (mrdoob) - Fixed bug in
DirectionalLightHelper
and SpotLightHelper
. (mrdoob) - Fixed bug in Phong shader when using normal maps with derivative tangents. (WestLangley)
- Added support for
FaceColors
to SoftwareRenderer
. - Updated
convert_obj_three.py
docstring with current loader interface. (wilsaj) - Updated OculusRiftEffect. Now it should work with the original OculusRift. (troffmo5)
- Fixed vertex normals and UVs for CircleGeometry. (WestLangley)
- Added snapping to the editor. (arodic)
- Fixed
SpotLight
's angle
and SpotlightHelper
's cone size bug. (WestLangley) - Using
CanvasRenderer
in the editor when there is no WebGL support. (mrdoob) - Update
STLLoader
with github improvements. (gero3) - Fixed UVs for faces that straddle the seam in
PolyhedronGeometry
. (WestLangley) - Cleaned up
ArrowHelper
. (WestLangley) - Added
VertexColors
support for Line
in CanvasRenderer
. (gero3) - Fixed
TrackballControls
zoom increment to normalize responsiveness across various inputs. (protometa)
2013 03 15 - r57 (403,818 KB, gzip: 96,416 KB)
- Added Renderer panel to the editor. (mrdoob)
- Added support for custom attributes to
BufferGeometry
. (zz85) CanvasRenderer
and SVGRenderer
behave like WebGLRenderer
with MeshLambertMaterial
and no lights. (mrdoob)- Added
ColorConverter
in examples folder. (bhouston and zz85) - Fixed
SVGRenderer
when autoClear false. (mrdoob) - Made
WebGLRenderer
sorting truly stable. (wereHamster and mrdoob) - Improved
Object3D
and Camera
lookAt()
. (WestLangley) - Added
RingGeometry
. (merpnderp) - Made
OBJLoader
and OBJMTLLoader
more robust. (mrdoob) - Added pan to
OrbitControls
. (WestLangley and mrdoob) - Added
.getColumnFromMatrix()
to Vector3
. (WestLangley) - Renamed
Object3D
properties
to userData
. (mrdoob) - Simplified
PointLightHelper
, DirectionalLightHelper
, SpotLightHelper
and HemisphereLightHelper
. (mrdoob) - Added
GridHelper
. (mrdoob) - Added
.clone()
method to AmbientLight
, PointLight
, DirectionalLight
, SpotLight
and HemisphereLight
. (mrdoob)
2013 02 15 - r56 (408,927 KB, gzip: 97,095 KB)
2013 01 15 - r55 (406,462 KB, gzip: 96,542 KB)
- Added
set()
, identity()
, copy()
, multiplyScalar()
, determinant()
, getInverse()
and clone()
to Matrix3
. (bhouston) - Added a refactored
WebGLRenderer
under the WebGLRenderer2
name (may become WebGLRenderer
next release). (gero3) - Optimised
Matrix4
's determinant()
. (bhouston) - Added
negate()
to Plane
. (bhouston) - Added
containsPoint()
and intersectsObject()
to Frustum
. (bhouston) - Fixed
MeshNormalMaterial
rendering in CanvasRenderer
and SVGRenderer
. (mrdoob) - Moved
Matrix*/Quaternion
's multiply*
to Vector*
's .apply*
. (mrdoob) - Added
MeshNormalMaterial
with SmoothShading
support to CanvasRenderer
. (mrdoob) - Added
Edit / Clone
to the editor. (mrdoob) - Fixes to
ArrowHelper
. (bhouston and WestLangley) - Improved
Geometry
's mergeVertices()
. (bhouston) - Improved
LatheGeometry
. (bhouston and WestLangley) - Added
insertPass
to EffectComposer
. (alteredq) - Added support for
BufferGeometry
support to Line
. (arodic) - Added
intersectsSphere
to Sphere
. (Fox32) - Added Tone Mapping to
WebGLDeferredRenderer
. (alteredq) - Made
updateMorphTargets
a public method of Mesh
. (jonobr1) - Added
add()
, addColors()
, addScalar()
, multiply()
and multiplyScalar()
to Color
. (mrdoob) - Renamed
Vector*/Matrix*/Quaternion
's add()/sub()/cross()...
to addVectors()/subVectors()/crossVectors()...
. (mrdoob) - Renamed
Vector*/Matrix*/Quaternion
's addSelf()/subSelf()/crossSelf()...
to add()/sub()/cross()...
. (mrdoob) - Moved
GeometryUtils
's explode()
and tessellate()
to ExplodeModifier
and TessellateModifier
. (mrdoob) - Moved
BinaryLoader
out of the lib to examples folder. (mrdoob) - Added
OBJExporter
. (mrdoob) - Implemented pinch gesture to
TrackballControls
. (ericnoble and mrdoob) - Firefox support in
OrbitControls
.. (mrdoob) - Added zbuffer to
SoftwareRenderer
and started adding material handling. (rygorous and mrdoob) - Moved
CanvasRenderer/SVGRenderer
x/y clipping to Projector
. (mrdoob) - Added
applyEuler()
and applyAxisAngle()
in Vector3
. (WestLangley) - Improvements to
FirstPersonControls
. (RommelVR)
2012 12 25 - r54 (411,352 KB, gzip: 98,639 KB)
- Added nodejs, perl, python and ruby based localhost server. (zz85)
- Added support for alphaTest to
Sprite
. (alteredq) - Added
WebGLDeferredRenderer
with all sorts of goodness. (mpanknin and alteredq) - Changed
Sprite
to use SpriteMaterial
instead of custom object. (alteredq) - Added
sourcemap
option to python and nodejs build systems. (zz85 and gero3) - Non-indexed
BufferGeometry
. (benaadams) - Added support for loading cubemap DDS textures. (MiiBond)
- Added manual mipmapping support to
Texture
and DataTexture
. (benaadams and alteredq) - Added style strings support
Color
. (mrdoob) - Added new fbx converter. (zfedoran)
- Improvements to
SceneLoader
. (RommelVR and alteredq) - Added
Plane
class and implemented in Frustum
. (bhouston) - Added
Box3
, Sphere
math classes and implemented in Geometry
. (bhouston) - Added bilinear filtered shadow map. (MiiBond)
- Added test framework. (bhouston)
- Replaced
UV
with Vector2
. (mrdoob) - Renamed
Ray
to Raycaster
and added new Ray
math class. (bhouston) - Improvements to
CSS3DRenderer
. (mrdoob, benaadams and zz85) - Implemented
.dispose()
to Geometry
, BufferGeometry
, Texture
, Material
and WebGLRenderTarget
for deallocating from GPU. (mrdoob and alteredq) - Moved
SubdivisionModifier
out of the build to examples/js/modifiers
. (mrdoob) - Improvements to
ColladaLoader
. (dgossow) - Added Blender 2.65 exporter. (tapio)
- Added
.setMaterialIndex()
to GeometryUtils
. (gero3) - Added benchmark framework. (bhouston)
- Fixed Blender scene exporter rotations. (alteredq and WestLangley)
- Added
devicePixelRatio
support to CanvasRenderer
and WebGLRenderer
. (mrdoob)
2012 11 15 - r53 (392,799 KB, gzip: 96,044 KB)
- Lots of improvements to editor. Including possibility to export geometry and scene. (alteredq and mrdoob)
Sprite
no longer gets its size from the texture. (alteredq and mrdoob)- Improved
CSS3DRenderer
. (mrdoob and alteredq) - Added support for vertex normals in
Ribbon
. (alteredq) Object3D
's .clone()
is now recursive. (mrdoob)- Added support for fog in
Sprite
. (alteredq) - Scene format now supports nested lights, cameras and SkinnedMesh, OBJ, VTK, STL, UTF8 and Collada files. (alteredq)
Object3D
's .lookAt()
now working when using quaternions. (motin)- Added touch support to
TrackballControls
. (mrdoob) - Object sorting in
WebGLRenderer
is now stable, regardless of browser implementation. (alteredq) MeshPhongMaterial
's perPixel
is not true
by default. (alteredq)- Added
LineDashedMaterial
. (alteredq) - Added
.setContextStyle
to Color
. (greyscales) - Corrected normal matrix calculations. (WestLangley)
- Added
KaleidoShader
, MirrorShader
and RGBShiftShader
. (felixturner) - Added area weighted vertex normals computation to
Geometry
. (alteredq) - Moved geometry.materials to
MeshFaceMaterial
. (gero3, alteredq and mrdoob) - Removed
materials
and sides
from CubeGeometry
. (mrdoob) - Move
GeometryUtils
's .clone()
to Geometry
. (mrdoob)
2012 10 15 - r52 (379,442 KB, gzip: 94,126 KB)
- New node.js build system. (gero3)
- Proper edge handling in
SubdivisionModifier
. (zz85) - Added
defines
parameter for adding preprocessor definitions to ShaderMaterial
. (alteredq) - Split
ShaderExtras
into single files (BasicShader
, BlendShader
, ConvolutionShader
, ... ). (mrdoob) - Added
HueSaturationShader
and BrightnessContrastShader
. (tapio) - Fixed
ColladaLoader
not loading sometimes. (tapio) - Added
material.vertexColors = THREE.FaceColor
support to CanvasRenderer
and SVGRenderer
. (mrdoob) - Added
Object3D.defaultEulerOrder
. (mrdoob) - Replaced
SceneUtils.traverseHierarchy
and SceneUtils.showHierarchy
with object.traverse
. (mrdoob) - Added
PointerLockControls
. (mrdoob) - Completed more documentation pages. (sole)
- Split
SceneUtils.cloneObject
into *.clone()
. (mrdoob) - Simplified
AxisHelper
. (mrdoob) - Added
GeometryExporter
. (mrdoob) - Improved
OrbitControls
. (WestLangley) - Added
GeometryLibrary
, MaterialLibrary
, TextureLibrary
and ObjectLibrary
(bear in mind that you can't rely on the GC now. Call *.deallocate()
for removing). (mrdoob) - Moved
*Controls
out of the lib. (mrdoob) - Fixed shadows getting animated when skinning / morphing was disabled. (alteredq)
- Added
Manual
section to the documentation pages. (oal) - Added
.angleTo()
to Vector3
. (Wilt) - Many improvements to the editor. (mrdoob and alteredq)
2012 09 15 - r51 (405,491 KB, gzip: 99,389 KB)
- Added
STLLoader
. (aleeper and mrdoob) - Optimised
Ray
(2x faster). (gero3) - Added
.getDescendants
method to Object3D
. (gero3 and mrdoob) SkinnedMesh
can now work with MorphAnimMesh
. (apendua)- Changed
CameraHelper
. Now it matches the camera independently of where it's in the scene graph. (mrdoob) - Removed the need for manually setting texture units with
ShaderMaterial
. (alteredq) - Added
HemisphereLight
. (alteredq) - Fixed
WebGLRenderer
handling of flip sided materials. (WestLangley and alteredq) - Added support to normals maps in
MeshPhongMaterial
. (crobi and alteredq) - Added handling of
BufferGeometry
for ParticleSystems
. (alteredq) - Added support for compressed textures and cube maps to
WebGLRenderer
. (alteredq) - Outliner and Material panel improvements to the editor. (mrdoob)
- Added material.emissive support to
CanvasRenderer
and SVGRenderer
. (mrdoob) - Added handling of multiple UV layers and anisotropy to Blender exporter. (alteredq)
- Handling bump and anisotropy in
Loader
and SceneLoader
. (alteredq) - Added mousewheel support to
TrackballControls
. (jherrm) - Added
MTLLoader
and OBJMTLLoader
. (angelxuanchang) - Updated
UTF8Loader
to latest version. (angelxuanchang and alteredq) - Pluginized
SceneLoader
. (alteredq) - Added support of
object.renderDepth
in Projector
. (mrdoob) - Made build system more flexible. (mrdoob)
- Many enhancements to
SceneLoader
. (alteredq) - Experimenting with
CSS3DRenderer
. (mrdoob) - Added
ShapeGeometry
. (jonobr1) - Fixes to
Vector3
's .setEulerFromRotationMatrix
method.(WestLangley)
2012 08 15 - r50 (391,250 KB, gzip: 96,143 KB)
- Experimenting with SoftwareRenderer. (mrdoob and rygorous)
- Improved rotation conversion routines. (WestLangley)
- Moved
DOMRenderer
and SVGRenderer
out of common build. (mrdoob) - Improvements to Morph targets. (alteredq and gero3)
- Added
.deallocateMaterial
method to WebGLRenderer
. (alteredq) - Added
.worldToLocal
and .localToWorld
methods to Object3D
. (zz85 and WestLangley) - Added
ConvexGeometry
. (qiao) - Added node.js build system. (gero3)
- Improvements to Blender exporter. (timbot and alteredq)
- Added uvs and vertex colors support to
ImmediateRenderObjects
. (alteredq) - Started implementing
LoadingMonitor
and EventTarget
in loaders. (mrdoob) - Added
Path.ellipse
. (linzhp) - Added
near
and far
properties to Ray
. (niklassa) - Added
OrbitControls
. (qiao, mrdoob and alteredq) - Completed some more documentation pages. (mrdoob, phenomnomnominal, FuzzYspo0N, poeschko, wwwtyro, maximeq and alteredq)
- Completed lots more documentation pages. (sole)
- Started reworking GUI. (mrdoob)
- Improved python build system. (gero3)
- Made
VTKLoader
parsing more robust. (mrdoob) - Added
recursive
flag to Ray
. (mrdoob) - Handling resizes properly in controls and examples. (alteredq)
- Improvements to ColladaLoader. (spacecookies)
- Unflipped V coordinate across the whole library. (mrdoob and alteredq)
- Refactored
BufferGeometry
. (alteredq) - Improved GL extensions initialisation in
WebGLRenderer
. (alteredq) - Rescued
SkinnedMesh
. (n3tfr34k and alteredq) - Made
OBJLoader
parsing more robust. (Dahie) - Implemented skinning via floating point textures. (alteredq)
- Improved documentation system. (mrdoob and alteredq)
- Added support for anisotropic texture filtering and standard derivatives in
WebGLRenderer
. (alteredq) - Added support for
ParticleBasicMaterial
without map
in CanvasRenderer
. (mrdoob) SceneLoader
now supports nested scene graphs and per object custom properties. (skfcz)Camera
doesn't need to be added to the scene anymore. (mrdoob)Object3D
's flipSided
and doubleSided
properties are now Material
's side
property. (alteredq and mrdoob)- Added
.clone
method to *Material
. (gero3, mrdoob and alteredq) - IEWEBGL support. (iewebgl and mrdoob)
- Added
CircleGeometry
. (hughes) - Added
bumpMap
to MeshPhongMaterial
. (alteredq) - Added
specularMap
to MeshBasicMaterial
, MeshLambertMaterial
and MeshPhongMaterial
. (alteredq) - Reworked python build system. (mrdoob)
2012 04 22 - r49 (364,242 KB, gzip: 89,057 KB)
- Yet more
ColladaLoader
improvements. (ekitson, AddictArts and pblasco) - Created documentation system. (mrdoob)
- Added some documentation. (mrdoob and sole)
- Added
MorphBlendMesh
. (alteredq) - Added
emissive
component to WebGL Materials. (alteredq) - Added
DepthPassPlugin
. (alteredq) - Improvements to
Path
. (asutherland) - Improvements to
Curve
. (zz85) - Added
ArrowHelper
. (zz85 and WestLangley) - Changed depth sorting in
WebGLRenderer
to use world positions. (alteredq) - Improved physically based shading in
WebGLRenderer
. (WestLangley) - Changed depth sorting in
Projector
to use world positions. (mrdoob) - Added physical specular term also to normal map shader. (alteredq)
- Added
TubeGeometry
. (zz85 and WestLangley) - Added
needsUpdate
flag to Material
. (alteredq) - Fixed
GeometryUtils.triangulateQuads
. (alteredq) - Improvements to
GeometryUtils.tessellate
. (alteredq) - Change
PlaneGeometry
from XY to XZ. (mrdoob) WebGLRenderer
back to highp
shader precision. (mrdoob)- Added
deallocateRenderTarget
to `WebGLRenderer. (kovleouf) - Support zIndex and scale into
DOMRenderer
. (ajorkowski) - Improvements to
CameraHelper
. (zz85) - Added 3D spline path extrusion support to
ExtrudeGeometry
. (zz85) MarchingCubes
moved out of the lib into /examples/js
folder. (alteredq)- Added
ImmediateRenderObject
. (alteredq) - Renamed
__dirty*
to *NeedUpdate
. (valette and mrdoob) - Added
CustomBlending
to Material
and premultiplyAlpha
to Texture
. (alteredq) - Improvements to
CubeCamera
. (alteredq and mrdoob) CanvasRenderer.setClearColor()
and .setClearColorHex()
now sets opacity
to 1 when null. (mrdoob)- Fixed broken UVs in
SubdivisionModifier
. (zz85) - Renamed
Matrix4
's setTranslation
, setRotationX
, setRotationY
, setRotationZ
, setRotationAxis
and setScale
to makeTranslation
, makeRotationX
, makeRotationY
, makeRotationZ
, makeRotationAxis
and makeScale
. (mrdoob) Matrix4
static methods makeFrustum
, makePerspective
, makeOrtho
to non-static methods. (mrdoob)- Refactore handling of
Matrix4
to Matrix3
inversion. (alteredq) - Added
GodRays
postprocessing. (huwb) - Added
LinePieces
support to Projector
. (mrdoob) - Fixed UVs handling bug in
GeometryUtils.tessellate
. (alteredq) - Serious performance improvements to
Matrix4
, Matrix3
and Frustum
. (gero3) - Fixes to
LatheGeometry
. (zz85) - Removed
Vertex
. Use Vector3
instead. (mrdoob) - Implemented real
Spotlight
s. (alteredq) - Added
ParametricGeometry
. (zz85) - Added basic
OBJLoader
in /examples/js/loaders
folder. (mrdoob) - Moved
ColladaLoader
and UTF8Loader
to /examples/js/loaders
folder. (mrdoob) - Added
VTKLoader
to /examples/js/loaders
folder. (valette and mrdoob) - Blender exporter now supports linked groups. (Druidhawk)
- Added
visible
property to Material
. (mrdoob) - Removed Lamber+Texture support in
CanvasRenderer
. (mrdoob) - Fixed normals in
CylinderGeometry
. (qiao) - Added floating point textures support to
WebGLRenderer
. (mrdoob) - Renamed
AnaglyphWebGLRenderer
and co. to AnaglyphEffect
& co. and moved to /examples/js/effects
. (mrdoob) - Improvements to documentation system. (mrdoob and codler)
- Added
AsciiEffect
. (zz85)
2012 03 04 - r48 (393,626 KB, gzip: 99,395 KB)
- Added camera support to
ColladaLoader
. (jbaicoianu) - More
ColladaLoader
improvements. (mrdoob, AddictArts, kduong) - Updated
IcosahedronGeometry
and OctahedronGeometry
with timothypratley's PolyhedronGeometry
code which also brings TetrahedronGeometry
. (mrdoob) LOD
should now behave as expected from anywhere in the scene graph. (mrdoob)- Added
THREE.REVISION
. (mrdoob) - Fixed cancelRequestAnimationFrame polyfill. (also)
- Improvements to convert_obj_three.py. (alteredq)
- Fixes to
Geometry
's .computeBoundingBox
and .computeBoundingSphere
. (alteredq) - Refactored ShadowMap shader. (alteredq)
- Fixed handling of meshes with multiple materials in
SceneLoader
. (alteredq) - Changed
Material
's default ambient color to 0xffffff. (alteredq) - Added normals support to
MorphTarget
. (alteredq) - Added
.setFrameRange
and .setAnimationLabel
to MorphAnimMesh
. (alteredq) - Added handling of named animation sequences to
MorphAnimMesh
. (alteredq) - Extended
MorphAnimMesh
to be able to play animations backwards. (alteredq) - Added
.generateDataTexture
to ImageUtils
. (alteredq) - Removed hierarchy support and
.intersectScene()
from Ray
. (mrdoob) - Added
.triangulateQuads
to GeometryUtils
. (alteredq) Projector
and WebGLRenderer
now handles doubleSided lighting properly. (mrdoob and alteredq)- Fixed
MorphAnimMesh
playback bug where the last frame didn't display. (alteredq) TrackballControls
implements EventTarget
. (mrdoob)- Added
.clone
to Vertex
, Face3
and Face4
. (alteredq) - Added
.explode
and .tessellate
to GeometryUtils
. (alteredq) - Added
.lerpSelf
to Vector2
, Vector3
and UV
. (alteredq) - Fixed
DOMRenderer
by using single-materials. (ajorkowski ) - Added
.setPrecision
to Ray
. (mrdoob) - Blender exporter now honors the "Flip YZ" option. (rectalogic)
- Added
NoBlending
to Material
and WebGLRenderer
. (kovleouf) - Added
.applyMatrix
to Object3D
. (mrdoob and alteredq) - Added
.attach
and .detach
to SceneUtils
to retain position in space. (alteredq) - Added
.sign
to Math
. (alteredq) - Implemented sphinx based documentation. (ivankuzev)
- Documented part of the API. (ivankuzev and alteredq)
- Replaced sphinx based documentation with compilation-less sytem. (mrdoob)
- Added default material to
Mesh
, Line
and ParticleSystem
. (mrdoob)
2012 01 14 - r47 (378,169 KB, gzip: 96,015 KB)
- Resurrected lens flares as custom
WebGLRenderer
plugin. (alteredq) - Fixed typos in
Matrix4
's transpose()
and getInverse()
. (ekitson) - "Pluginized" Sprites and ShadowMaps. (alteredq)
- Added
Frustum
class. (alteredq) ColladaLoader
improvements. (ekitson, jterrace, mrdoob and alteredq)- Lights in a hierarchy are now supported when using
WebGLRenderer
. (alteredq) - Included requestAnimationFrame shim in the lib. (mrdoob)
- Started documentation effort in
/doc
(using sphinx). (jterrace) - Changed default shader precission to
mediump
. (mrdoob) - Added support for the format OpenCTM. (alteredq)
- Added
BufferGeometry
for direct rendering from typed arrays. (alteredq) - Extended
Texture
class with format
and type
parameters. (alteredq) - Automatically reducing texture to max size of WebGL hardware. (greggman and alteredq)
- Improved
WebGLRenderer
's Shadow Map code. (alteredq) - Checking for
xhr.overrideMimeType
before using it (fixing IE support). (mrdoob and alteredq) - Improved ATI and ANGLE support in across
WebGLRenderer
shaders. (alteredq) - Added
generateMipmaps
property to Texture
and RenderTarget
. (alteredq) Frustum
properly handling children with scaled parents. (avinoamr)- Fixed
Ray
when dealing with big polygons. (WestLangley) - Fixed
WebGLRenderer
bug where depth buffer was not cleared. (ekitson) - Added
CameraHelper
objects for visualising both Perspective and Orthographic cameras. (alteredq) - Improvements to
Path
. (zz85) - Improvements to Postprocessing stack. (alteredq)
- Added shadows for
DirectionalLight
s. (alteredq) - Added
Gyroscope
object. (alteredq) - Added
alpha
and premultipliedAlpha
parameters to WebGLRenderer
. (mrdoob) Ray
properly handling children with scaled parents. (mrdoob)- Renamed
Axes
object to AxisHelper
. (mrdoob)
2011 11 17 - r46 (343.383 KB, gzip: 87.468 KB)
- Added reflections to Normal Mapping. (alteredq)
Ray
now checks also object children. (mrdoob)*Loader.load( parameters )
to *Loader( url, callback, texturePath )
. (mrdoob and alteredq)- Reworked scene graph setup. (mrdoob and alteredq)
- Fixed
CanvasRenderer
's SphericalReflectionMapping
rendering. (mrdoob) - Improved
SubdivisionModifier
. (zz85) - Refactored
*Controls
to use externally supplied time delta. (alteredq) - Improvements to
CombinedCamera
. (zz85) ColladaLoader
doesn't create extra Object3D
. (mrdoob)- Improvements to Lambert and Phong materials. (alteredq)
- Removed multi-materials for simplicity reasons. (Multi-materials will come back with MeshLayerMaterial hopefully soon) (alteredq)
- Fixed
Ray
not considering edges. (mrdoob) - Massive cleanup to
WebGLRenderer
. (alteredq) Ray
optimisations. (mrdoob and alteredq)- JSON file format is now worker-less (this was crashing Chrome/Firefox with dealing with many assets). (alteredq)
- Improved
CubeGeometry
, PlaneGeometry
, IcosahedronGeometry
and SphereGeometry
. (mrdoob) - Improvements to
Curve
. (zz85) - Removed
Collisions
code and focusing on Ray
. (mrdoob) - Added
cloneObject()
method to SceneUtils
. (alteredq)
2011 10 06 - r45 (340.863 KB, gzip: 86.568 KB)
Object/Scene.add*()
and Object/Scene.remove*()
are now Object/Scene.add()
and Object/Scene.remove()
. (mrdoob)LOD.add()
is now LOD.addLevel()
. (mrdoob)- Reworked
CylinderGeometry
. (mrdoob) - Added
.depthWrite
and .fog
to Material
. (alteredq) - Added
.applyMatrix
to Geometry
. (mrdoob) - Improved postprocessing stack in
/examples/js/postprocessing
. (alteredq) - Added a realistic skin shading example. (alteredq)
- Started of a GUI for composing scenes and autogenerate code. (mrdoob)
- Added
.center()
to GeometryUtils
. (alteredq) - Fixed buggy scenegraph manipulation (adding/removing objects). (jsermeno, alteredq and skython)
- Renamed
MeshShaderMaterial
to ShaderMaterial
. (alteredq) - Fixed
CanvasRenderer
ignoring color of SmoothShading
ed MeshLambertMaterial
. (mrdoob) - Renamed
renderer.data
to renderer.info
. (mrdoob) - Fixed ShadowMap aspect ratio. (kig and alteredq)
- Fixed
Loader
's extractUrlbase()
incorrect output for short urls. (rectalogic and alteredq) - Added
.color
and .visible
support to Sprite
. (alteredq) - Added
Face4
, Vertex Colors and Maya support to ColladaLoader
. (mrdoob) - Rewrite of lighting shader code. (alteredq)
- Improved internal array concatenation approach. (pyrotechnick)
WebGLRenderer
performance improvements. (alteredq)- Added lower level immediate rendering support to
WebGLRenderer
. (NINE78 and alteredq) - Added
CubeCamera
for rendering cubemaps. (alteredq) - Improved
GeometryUtils
's .mergeVertices()
performance. (zz85) - Removed
Camera
's .target
. (mrdoob) WebGLRenderer
's .clear()
is now .clear( color, depth, stencil )
. (mrdoob)- Added
.autoClearColor
, .autoClearDepth
and .autoClearStencil
to WebGLRenderer
. (mrdoob and alteredq) - Added
OctahedronGeometry
. (clockworkgeek) - Splitted
Camera
into PerspectiveCamera
and OrthographicCamera
. (mrdoob and alteredq) - Special cameras are now
*Controls
. (alteredq and mrdoob) - Added
SubdivisionModifier
. (zz85) Projector
's unprojectVector()
now also works with OrthographicCamera
. (jsermeno)- Added
.setLens()
method to PerspectiveCamera
. (zz85) - Added Shadow Maps,
Texture
's .offset
and .repeat
and reflections support to Normal Map shader. (alteredq)
2011 09 04 - r44 (330.356 KB, gzip: 84.039 KB)
- Added
ColladaLoader
. (timknip2) - Improved
ExtrudeGeometry
. (zz85) - Fixed
CylinderGeometry
normals. (alteredq) - Fixed issue with
WebGLRenderer.setTexture
(rectalogic) - Fixed
TorusGeometry
normals. (mrdoob) - Fixed
Ray
behind-ray intersects. (mrdoob) - Added
OrthoCamera
. (alteredq) - Refactored postprocessing effects used in some examples. (alteredq)
- Added
.deallocateObject()
and .deallocateTexture()
methods to WebGLRenderer
. (mrdoob) - Fixed a glitch in normal and phong shader. (evanw and alteredq)
- Added
.frustumCulled
property to Object3D
. (alteredq and mrdoob)
2011 08 14 - r43 (298.199 KB, gzip: 74.805 KB)
- Improved Blender exporter - 2.58 (and 2.59) support, normals maps, specular, ao maps... (alteredq)
- Added CORS to
ImageUtils
. (mrdoob) - Refactored
TextGeometry
and added Shape
, Curve
, Path
, ExtrudeGeometry
, TextPath
. (zz85 and alteredq) - Added handling of custom attributes for
ParticleSystems
. (alteredq) - Fixed
CanvasRenderer.setClearColor
. (mrdoob, StephenHopkins and sebleedelisle) - Improved uniform handling in
WebGLRenderer
. (alteredq) - Implemented Shadow Mapping in
WebGLRenderer
. (alteredq) - Added
Spotlight
light type. (alteredq) - Fixed constructor-less prototypes. (pushmatrix)
- Added
DataTexture
. (alteredq) WebGLRenderer
opaque pass now renders from front to back. (alteredq)- Simplified
Color
. (mrdoob) - Added
preserveDrawingBuffer
option to WebGLRenderer
. (jeromeetienne) - Added
UTF8Loader
for loading the new, uber compressed, UTF8 format. (alteredq) CanvasRenderer
now supports RepeatWrapping
, texture.offset
and texture.repeat
. (mrdoob)- Removed Stencil Shadows and Lensflare code. (mrdoob)
2011 07 06 - r42 (277.852 KB, gzip: 69.469 KB)
- Added
AnaglypWebGLRenderer
and CrosseyedWebGLRenderer
. (mrdoob, alteredq and marklundin) - Added
TextGeometry
. (zz85 and alteredq) - Added
setViewOffset
method to Camera
. (greggman) - Renamed geometries to
*Geometry
. (mrdoob) - Improved Blender exporter. (alteredq, sweetfish and Jhonnyg)
- Added Blender 2.58 exporter. (georgik)
- Fixed
Matrix4.multiply()
. (thanks lukem1) - Added support for additional Euler rotation orders in
Matrix4
. (rectalogic) - Renamed
QuakeCamera
to FirstPersonCamera
. (chriskillpack) - Improved Normal Map Shader. (alteredq)
Collision
now supports Object3D.flipSided
and Object3D.doubleSided
. (NINE78)- Removed most of
SceneUtils
methods. (mrdoob) - Removed
Sound
object and SoundRenderer
. (mrdoob)
2011 05 31 - r41/ROME (265.317 KB, gzip: 64.849 KB)
(Up to this point, some RO.ME specific features managed to get in the lib. The aim is to clean this up in next revisions.)
- Improved Blender Object and Scene exporters. (alteredq)
- Fixes on WebGL attributes. (alteredq and empaempa)
- Reduced overall memory footprint. (mrdoob)
- Added
Face4
support to CollisionSystem
. (NINE78) - Added Blender 2.57 exporter. (remoe)
- Added
Particle
support to Ray
. (mrdoob and jaycrossler) - Improved
Ray.intersectObject
performance by checking boundingSphere first. (mrdoob) - Added
TrackballCamera
. (egraether) - Added
repeat
and offset
properties to Texture
. (mrdoob and alteredq) - Cleaned up
Vector2
, Vector3
and Vector4
. (egraether)
2011 04 24 - r40 (263.774 KB, gzip: 64.320 KB)
- Fixed
Object3D.lookAt
. (mrdoob) - More and more Blender exporter goodness. (alteredq and mrdoob)
- Improved
CollisionSystem
. (drojdjou and alteredq) - Fixes on WebGLRenderer. (empaempa)
- Added
Trident
object. (sroucheray) - Added
data
object to Renderers for getting number of vertices/faces/callDraws from last render. (mrdoob) - Fixed
Projector
handling Particles with hierarchies. (mrdoob)
2011 04 09 - r39 (249.048 KB, gzip: 61.020 KB)
- Improved WebGLRenderer program cache. (alteredq)
- Added support for pre-computed edges in loaders and exporters. (alteredq)
- Added
Collisions
classes. (drojdjou) - Added
Sprite
object. (empaempa) - Fixed
*Loader
issue where Workers were kept alive and next loads were delayed. (alteredq) - Added
THREE
namespace to all the classes that missed it. (mrdoob)
2011 03 31 - r38 (225.442 KB, gzip: 55.908 KB)
- Added
LensFlare
light. (empaempa) - Added
ShadowVolume
object (stencil shadows). (empaempa) - Improved Blender Exporter plus added Scene support. (alteredq)
- Blender Importer for loading JSON files. (alteredq)
- Added load/complete callbacks to
Loader
(mrdoob) - Minor WebGL blend mode clean up. (mrdoob)
- *Materials now extend Material (mrdoob)
material.transparent
define whether material is transparent or not (before we were guessing). (mrdoob)- Added internal program cache to WebGLRenderer (reuse already available programs). (mrdoob)
2011 03 22 - r37 (208.495 KB, gzip: 51.376 KB)
- Changed JSON file format. (Re-exporting of models required) (alteredq and mrdoob)
- Updated Blender and 3DSMAX exporters for new format. (alteredq)
- Vertex colors are now per-face (alteredq)
Geometry.uvs
is now a multidimensional array (allowing infinite uv sets) (alteredq)CanvasRenderer
renders Face4
again (without spliting to 2 Face3
) (mrdoob)ParticleCircleMaterial
> ParticleCanvasMaterial
. Allowing injecting any canvas.context
code! (mrdoob)
2011 03 14 - r36 (194.547 KB, gzip: 48.608 KB)
- Added 3DSMAX exporter. (alteredq)
- Fixed
WebGLRenderer
aspect ratio bug when scene had only one material. (mrdoob) - Added
sizeAttenuation
property to ParticleBasicMaterial
. (mrdoob) - Added
PathCamera
. (alteredq) - Fixed
WebGLRenderer
bug when Camera has a parent. CameraCamera.updateMatrix
method. (empaempa) - Fixed
Camera.updateMatrix
method and Object3D.updateMatrix
. (mrdoob)
2011 03 06 - r35 (187.875 KB, gzip: 46.433 KB)
- Added methods
translate
, translateX
, translateY
, translateZ
and lookAt
methods to Object3D
. (mrdoob) - Added methods
setViewport
and setScissor
to WebGLRenderer
. (alteredq) - Added support for non-po2 textures. (mrdoob and alteredq)
- Minor API clean up. (mrdoob)
2011 03 02 - r34 (186.045 KB, gzip: 45.953 KB)
- Now using camera.matrixWorldInverse instead of camera.matrixWorld for projecting. (empaempa and mrdoob)
- Camel cased properties and object json format (Re-exporting of models required) (alteredq)
- Added
QuakeCamera
for easy fly-bys (alteredq) - Added
LOD
example (alteredq)
2011 02 26 - r33 (184.483 KB, gzip: 45.580 KB)
- Changed build setup (build/Three.js now also include extras) (mrdoob)
- Added
ParticleSystem
object to WebGLRenderer
(alteredq) - Added
Line
support to WebGLRenderer
(alteredq) - Added vertex colors support to
WebGLRenderer
(alteredq) - Added
Ribbon
object. (alteredq) - Added updateable textures support to
WebGLRenderer
(alteredq) - Added
Sound
object and SoundRenderer
. (empaempa) LOD
, Bone
, SkinnedMesh
objects and hierarchy being developed. (empaempa)- Added hierarchies examples (mrdoob)
2010 12 31 - r32 (89.301 KB, gzip: 21.351 KB)
Scene
now supports Fog
and FogExp2
. WebGLRenderer
only right now. (alteredq)- Added
setClearColor( hex, opacity )
to WebGLRenderer
and CanvasRenderer
(alteredq & mrdoob) WebGLRenderer
shader system refactored improving performance. (alteredq)Projector
now does frustum culling of all the objects using their sphereBoundingBox. (thx errynp)material
property changed to materials
globaly.
2010 12 06 - r31 (79.479 KB, gzip: 18.788 KB)
- Minor Materials API change (mappings). (alteredq & mrdoob)
- Added Filters to
WebGLRenderer
python build.py --includes
generates includes string
2010 11 30 - r30 (77.809 KB, gzip: 18.336 KB)
- Reflection and Refraction materials support in
WebGLRenderer
(alteredq) SmoothShading
support on CanvasRenderer
/MeshLambertMaterial
MeshShaderMaterial
for WebGLRenderer
(alteredq)- Removed
RenderableFace4
from Projector
/CanvasRenderer
(maybe just temporary). - Added extras folder with
GeometryUtils
, ImageUtils
, SceneUtils
and ShaderUtils
(alteredq & mrdoob) - Blender 2.5x Slim now the default exporter (old exporter removed).
2010 11 17 - r29 (69.563 KB)
- New materials API Still work in progress, but mostly there. (alteredq & mrdoob)
- Line clipping in
CanvasRenderer
(julianwa) - Refactored
CanvasRenderer
and SVGRenderer
. (mrdoob) - Switched to Closure compiler.
2010 11 04 - r28 (62.802 KB)
Loader
class allows load geometry asynchronously at runtime. (alteredq)MeshPhongMaterial
working with WebGLRenderer
. (alteredq)- Support for huge objects. Max 500k polys and counting. (alteredq)
Projector.unprojectVector
and Ray
class to check intersections with faces (based on mindlapse work)- Fixed
Projector
z-sorting (not as jumpy anymore). - Fixed Orthographic projection (was y-inverted).
- Hmmm.. lib file size starting to get too big...
2010 10 28 - r25 (54.480 KB)
WebGLRenderer
now up to date with other renderers! (alteredq)- .obj to .js python converter (alteredq)
- Blender 2.54 exporter
- Added
MeshFaceMaterial
(multipass per face) - Reworked
CanvasRenderer
and SVGRenderer
material handling
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
2010 09 17 - r17 (39.487 KB)
- Added
Light
, AmbientLight
and DirectionalLight
(philogb) WebGLRenderer
basic lighting support (philogb)- Memory optimisations
2010 08 21 - r16 (35.592 KB)
- Workaround for Opera bug (clearRect not working with context with negative scale)
- Additional
Matrix4
and Vector3
methods
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
2010 07 17 - r14 (32.144 KB)
- 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
2010 07 12 - r13 (29.492 KB)
- Added
ParticleCircleMaterial
and ParticleBitmapMaterial
Particle
now use ParticleCircleMaterial
instead of ColorFillMaterial
Particle.size
> Particle.scale.x
and Particle.scale.y
Particle.rotation.z
for rotating the particleSVGRenderer
currently out of sync
2010 07 07 - r12 (28.494 KB)
- 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
2010 07 03 - r11 (23.541 KB)
- Blender 2.5 exporter (utils/export_threejs.py) now exports UV and normals (Thx kikko)
Scene.add
> Scene.addObject
- Enabled
Scene.removeObject
2010 06 22 - r10 (23.959 KB)
- Changed Camera system. (Thx Paul Brunt)
Object3D.overdraw = true
to enable CanvasRenderer screen space point expansion hack.
2010 06 20 - r9 (23.753 KB)
- JSLinted.
autoClear
property for renderers.- Removed SVG rgba() workaround for WebKit. (WebKit now supports it)
- Fixed matrix bug. (transformed objects outside the x axis would get infinitely tall :S)
2010 06 06 - r8 (23.496 KB)
- Moved UVs to
Geometry
. CanvasRenderer
expands screen space points (workaround for antialias gaps).CanvasRenderer
supports BitmapUVMappingMaterial
.
2010 06 05 - r7 (22.387 KB)
- Added Line Object.
- Workaround for WebKit not supporting rgba() in SVG yet.
- No need to call updateMatrix(). Use .autoUpdateMatrix = false if needed. (Thx Gregory Athons).
2010 05 17 - r6 (21.003 KB)
- 2d clipping on
CanvasRenderer
and SVGRenderer
clearRect
optimisations on CanvasRenderer
2010 05 16 - r5 (19.026 KB)
- Removed Class.js dependency
- Added
THREE
namespace Camera.x
-> Camera.position.x
Camera.target.x
> Camera.target.position.x
ColorMaterial
> ColorFillMaterial
FaceColorMaterial
> FaceColorFillMaterial
- Materials are now multipass (use array)
- Added
ColorStrokeMaterial
and FaceColorStrokeMaterial
geometry.faces.a
are now indexes instead of references
2010 04 26 - r4 (16.274 KB)
SVGRenderer
Particle renderingCanvasRenderer
uses context.setTransform
to avoid extra calculations
2010 04 24 - r3 (16.392 KB)
- Fixed incorrect rotation matrix transforms
- Added
Plane
and Cube
primitives
2010 04 24 - r2 (15.724 KB)
2010 04 24 - r1 (15.25 KB)