# 三维物体（[name]）

这是Three.js中大部分对象的基类，提供了一系列的属性和方法来对三维空间中的物体进行操纵。
请注意，可以通过[page:.add]( object )方法来将对象进行组合，该方法将对象添加为子对象，但为此最好使用[page:Group]（来作为父对象）。

## 构造器

### [name]()

构造器中不带有参数。

## 属性

### [property:Boolean castShadow]

对象是否被渲染到阴影贴图中。默认值为*false*。

### [property:Object3D children]

含有对象的子级的数组。请参阅[page:Group]来了解将手动对象进行分组的相关信息。

### [property:Material customDepthMaterial]

渲染到深度贴图时此材质要使用的自定义深度材质。 当使用[page:DirectionalLight]或[page:SpotLight]进行阴影投射时，如果您正在（a）修改顶点着色器中的顶点位置， （b）使用位移贴图，（c）alphaTest中使用alpha贴图，或（d）alphaTest中使用透明纹理， 您必须指定customDepthMaterial以得到合适的阴影。默认值*undefined*。

### [property:Material customDistanceMaterial]

与[page:.customDepthMaterial customDepthMaterial]相同，但与[page:PointLight]一起使用。默认值为*undefined*。

### [property:Boolean frustumCulled]

当这个属性被设置的时候，它将在渲染物体之前，检查每一帧的物体是否在摄像机的视锥体中。 否则，即使该物体不可见，它也将在每一帧中被渲染，默认值为*true*。

### [property:Integer id]

只读 —— 表示该对象实例ID的唯一数字。

### [property:Boolean isObject3D]

用于测试这个类或者派生类是否为Object3D，默认为*true*。
你不应当对这个属性进行改变，因为它在内部使用，以用于优化。

### [property:Layers layers]

物体的层级关系。 物体只有和一个正在使用的[page:Camera]至少在同一个层时才可见。

### [property:Matrix4 matrix]

局部变换矩阵。

### [property:Boolean matrixAutoUpdate]

当这个属性设置了之后，它将计算每一帧的位移、旋转（四元变换）和缩放矩阵，并重新计算matrixWorld属性。默认值是[page:Object3D.DefaultMatrixAutoUpdate] (true)。

### [property:Matrix4 matrixWorld]

物体的世界变换。若这个Object3D没有父级，则它将和local transform [page:.matrix]（局部变换矩阵）相同。

### [property:Boolean matrixWorldNeedsUpdate]

当这个属性设置了之后，它将计算在那一帧中的matrixWorld，并将这个值重置为false。默认值为*false*。

### [property:Matrix4 modelViewMatrix]

这个值传递给着色器，用于计算物体的位置。

### [property:String name]

对象的名称，可选、不必唯一。默认值是一个空字符串。

### [property:Matrix3 normalMatrix]

这个值传递给着色器，用于计算物体的光照。 它是物体的modelViewMatrix矩阵中，左上角3x3子矩阵的逆的转置矩阵。
使用这个特殊矩阵的原因，是只需使用modelViewMatrix就可以得出一个法线（缩放时）的非单位长度或者非垂直的方向（不规则缩放时）。
另一方面，modelViewMatrix矩阵中的位移部分和法线的计算无关，因此Matrix3就已经足够了。

### [property:function onAfterRender]

一个可选的回调函数，在Object3D渲染之后直接执行。 使用以下参数来调用此函数：renderer，scene，camera，geometry，material，group。

### [property:function onBeforeRender]

一个可选的回调函数，在Object3D渲染之前直接执行。 使用以下参数来调用此函数：renderer，scene，camera，geometry，material，group。

### [property:Object3D parent]

在[link:https://en.wikipedia.org/wiki/Scene_graph scene graph]（场景图）中，一个对象的父级对象。 一个对象最多仅能有一个父级对象。

### [property:Vector3 position]

表示对象局部位置的[page:Vector3]。默认值为(0, 0, 0)。

### [property:Quaternion quaternion]

表示对象局部旋转的[page:Quaternion Quaternion]（四元数）。

### [property:Boolean receiveShadow]

材质是否接收阴影。默认值为*false*。

### [property:Number renderOrder]

这个值将使得[link:https://en.wikipedia.org/wiki/Scene_graph scene graph]（场景图）中默认的的渲染顺序被覆盖， 即使不透明对象和透明对象保持独立顺序。 渲染顺序是由低到高来排序的，默认值为*0*。

### [property:Euler rotation]

物体的局部旋转，以弧度来表示。（请参阅[link:https://en.wikipedia.org/wiki/Euler_angles Euler angles]-欧拉角）

### [property:Vector3 scale]

物体的局部缩放。默认值是[page:Vector3]( 1, 1, 1 )。

### [property:Vector3 up]

这个属性由[page:.lookAt lookAt]方法所使用，例如，来决定结果的朝向。 默认值是[page:Object3D.DefaultUp]，即( 0, 1, 0 )。

### [property:object userData]

一个用于存储Object3D自定义数据的对象。 它不应当包含对函数的引用，因为这些函数将不会被克隆。

### [property:String uuid]

该对象实例的[link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID]。 这是一个自动生成的值，不应当对其进行修改。

### [property:Boolean visible]

可见性。这个值为*true*时，物体将被渲染。默认值为*true*。

## 静态属性

静态属性和方法由每个类所定义，并非由每个类的实例所定义。 也就是说，改变[page:Object3D.DefaultUp]或[page:Object3D.DefaultMatrixAutoUpdate]的值， 将改变每个在此之后由Object3D类（或派生类）创建的实例中的[page:.up up]和[page:.matrixAutoUpdate matrixAutoUpdate]的值。（已经创建好的Object3D不会受到影响）。

### [property:Vector3 DefaultUp]

默认的物体的[page:.up up]方向，同时也作为[page:DirectionalLight]、[page:HemisphereLight]和[page:Spotlight]（自顶向下创建的灯光）的默认方向。 默认设为( 0, 1, 0 )。

### [property:Boolean DefaultMatrixAutoUpdate]

[page:.matrixAutoUpdate matrixAutoUpdate]的默认设置，用于新创建的Object3D。

## 方法

### [page:EventDispatcher EventDispatcher] 方法在这个类上是可用的。

### [method:null add]( [param:Object3D object], ... )

添加对象到这个对象的子级，可以添加任意数量的对象。 当前传入的对象中的父级将在这里被移除，因为一个对象仅能有一个父级。
请参阅[page:Group]来查看手动编组对象的相关信息。

### [method:null applyMatrix]( [param:Matrix4 matrix] )

对当前物体应用这个变换矩阵，并更新物体的位置、旋转和缩放。

### [method:Object3D applyQuaternion]( [param:Quaternion quaternion] )

对当前物体应用由四元数所表示的变换。

### [method:this attach]( [param:Object3D object] )

将*object*作为子级来添加到该对象中，同时保持该object的世界变换。

### [method:Object3D clone]( [param:Boolean recursive] )

recursive —— 如果值为true，则该物体的后代也会被克隆。默认值为true。
返回对象前物体的克隆（以及可选的所有后代）。

### [method:this copy]( [param:Object3D object], [param:Boolean recursive] )

recursive —— 如果值为true，则该物体的后代也会被复制。默认值为true。
复制给定的对象到这个对象中。 请注意，事件监听器和用户定义的回调函数（[page:.onAfterRender] 和 [page:.onBeforeRender]）不会被复制。

### [method:Object3D getObjectById]( [param:Integer id] )

id —— 标识该对象实例的唯一数字。
搜索该对象的子级，返回第一个带有匹配id的子对象。
请注意，id是按照时间顺序来分配的：1、2、3、……，每增加一个新的对象就自增1。

### [method:Object3D getObjectByName]( [param:String name] )

name —— 用于来匹配子物体中Object3D.name属性的字符串。
搜索该对象的子级，返回第一个带有匹配name的子对象。
请注意，大多数的对象中name默认是一个空字符串，要使用这个方法，你将需要手动地设置name属性。

### [method:Object3D getObjectByProperty]( [param:String name], [param:Float value] )

name —— 将要用于查找的属性的名称。
value —— 给定的属性的值。
搜索该对象的子级，返回第一个给定的属性中包含有匹配的值的子对象。

### [method:Vector3 getWorldPosition]( [param:Vector3 target] )

[page:Vector3 target] — 结果将被复制到这个Vector3中。
返回一个表示该物体在世界空间中位置的矢量。

### [method:Quaternion getWorldQuaternion]( [param:Quaternion target] )

[page:Quaternion target] — 结果将被复制到这个Quaternion中。
返回一个表示该物体在世界空间中旋转的四元数。

### [method:Vector3 getWorldScale]( [param:Vector3 target] )

[page:Vector3 target] — 结果将被复制到这个Vector3中。
返回一个包含着该物体在世界空间中各个轴向上所应用的缩放因数的矢量。

### [method:Vector3 getWorldDirection]( [param:Vector3 target] )

[page:Vector3 target] — 结果将被复制到这个Vector3中。
返回一个表示该物体在世界空间中Z轴正方向的矢量。

### [method:Vector3 localToWorld]( [param:Vector3 vector] )

vector - 一个表示局部（物体）空间中位置的向量。
将局部空间向量转换为世界空间向量。

### [method:null lookAt]( [param:Vector3 vector] )
[method:null lookAt]( [param:Float x], [param:Float y], [param:Float z] )

vector - 一个表示世界空间中位置的向量。
也可以使用世界空间中[page:.x x]、[page:.y y]和[page:.z z]的位置分量。
旋转物体使其在世界空间中面朝一个点。
这一方法不支持其父级被旋转过或者被位移过的物体。

### [method:Array raycast]( [param:Raycaster raycaster], [param:Array intersects] )

抽象（空方法），在一条被投射出的射线与这个物体之间获得交点。 在一些子类，例如[page:Mesh], [page:Line], and [page:Points]实现了这个方法，以用于光线投射。

### [method:null remove]( [param:Object3D object], ... )

从当前对象的子级中移除对象。可以移除任意数量的对象。

### [method:this rotateOnAxis]( [param:Vector3 axis], [param:Float angle] )

axis —— 一个在局部空间中的标准化向量。
angle —— 角度，以弧度来表示。
在局部空间中绕着该物体的轴来旋转一个物体，假设这个轴已被标准化。

### [method:this rotateOnWorldAxis]( [param:Vector3 axis], [param:Float angle] )

axis -- 一个在世界空间中的标准化向量。
angle -- 角度，以弧度来表示。
在世界空间中绕着该物体的轴来旋转一个物体，假设这个轴已被标准化。 方法假设该物体没有旋转过的父级。

### [method:this rotateX]( [param:Float rad] )

rad - 将要旋转的角度（以弧度来表示）。
绕局部空间的X轴旋转这个物体。

### [method:this rotateY]( [param:Float rad] )

rad - 将要旋转的角度（以弧度来表示）。
绕局部空间的Y轴旋转这个物体。

### [method:this rotateZ]( [param:Float rad] )

rad - 将要旋转的角度（以弧度来表示）。
绕局部空间的Z轴旋转这个物体。

### [method:null setRotationFromAxisAngle]( [param:Vector3 axis], [param:Float angle] )

axis -- 一个在局部空间中的标准化向量。
angle -- 角度（以弧度来表示）。
调用[page:.quaternion]中的[page:Quaternion.setFromAxisAngle setFromAxisAngle]( [page:Float axis], [page:Float angle] )。

### [method:null setRotationFromEuler]( [param:Euler euler] )

euler -- 指定了旋转量的欧拉角。
调用[page:.quaternion]中的[page:Quaternion.setRotationFromEuler setRotationFromEuler]( [page:Euler euler])。

### [method:null setRotationFromMatrix]( [param:Matrix4 m] )

m -- 通过该矩阵中的旋转分量来旋转四元数。
调用[page:.quaternion]中的[page:Quaternion.setFromRotationMatrix setFromRotationMatrix]( [page:Matrix4 m])。
请注意，这里假设m上的3x3矩阵是一个纯旋转矩阵（即未缩放的矩阵）。

### [method:null setRotationFromQuaternion]( [param:Quaternion q] )

q -- 标准化的四元数。
将所给的四元数复制到[page:.quaternion]中。

### [method:Object toJSON]( [param:object meta] )

meta -- 包含有元数据的对象，例如该对象的材质、纹理或图片。 将对象转换为 three.js [link:https://github.com/mrdoob/three.js/wiki/JSON-Object-Scene-format-4 JSON Object/Scene format]（three.js JSON 物体/场景格式）。

### [method:this translateOnAxis]( [param:Vector3 axis], [param:Float distance] )

axis -- 一个在局部空间中的标准化向量。
distance -- 将要平移的距离。
在局部空间中沿着一条轴来平移物体，假设轴已被标准化。

### [method:this translateX]( [param:Float distance] )

沿着X轴将平移*distance*个单位。

### [method:this translateY]( [param:Float distance] )

沿着Y轴将平移*distance*个单位。

### [method:this translateZ]( [param:Float distance] )

沿着Z轴将平移*distance*个单位。

### [method:null traverse]( [param:Function callback] )

callback - 以一个object3D对象作为第一个参数的函数。
在对象以及后代中执行的回调函数。

### [method:null traverseVisible]( [param:Function callback] )

callback - 以一个object3D对象作为第一个参数的函数。
类似traverse函数，但在这里，回调函数仅对可见的对象执行，不可见对象的后代将不遍历。

### [method:null traverseAncestors]( [param:Function callback] )

callback - 以一个object3D对象作为第一个参数的函数。
在所有的祖先中执行回调函数。

### [method:null updateMatrix]()

更新局部变换。

### [method:null updateMatrixWorld]( [param:Boolean force] )

更新物体及其后代的全局变换。

### [method:null updateWorldMatrix]( [param:Boolean updateParents], [param:Boolean updateChildren] )

updateParents - recursively updates global transform of ancestors.
updateChildren - recursively updates global transform of descendants.
Updates the global transform of the object.

### [method:Vector3 worldToLocal]( [param:Vector3 vector] )

vector - 一个世界向量.
将世界空间中的向量转换为局部空间向量。

## 源代码

[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]