Spaces:
Running
Running
File size: 10,542 Bytes
2b7aae2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 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 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 | import { Vector3 } from './../math/Vector3';
import { Euler } from './../math/Euler';
import { Quaternion } from './../math/Quaternion';
import { Matrix4 } from './../math/Matrix4';
import { Matrix3 } from './../math/Matrix3';
import { Layers } from './Layers';
import { WebGLRenderer } from './../renderers/WebGLRenderer';
import { Scene } from './../scenes/Scene';
import { Camera } from './../cameras/Camera';
import { Material } from './../materials/Material';
import { Group } from './../objects/Group';
import { Intersection, Raycaster } from './Raycaster';
import { EventDispatcher, BaseEvent, Event } from './EventDispatcher';
import { BufferGeometry } from './BufferGeometry';
import { AnimationClip } from '../animation/AnimationClip';
/**
* Base class for scene graph objects
*/
export class Object3D<E extends BaseEvent = Event> extends EventDispatcher<E> {
constructor();
/**
* Unique number of this object instance.
*/
id: number;
uuid: string;
/**
* Optional name of the object (doesn't need to be unique).
* @default ''
*/
name: string;
/**
* @default 'Object3D'
*/
type: string;
/**
* Object's parent in the scene graph.
* @default null
*/
parent: Object3D | null;
/**
* Array with object's children.
* @default []
*/
children: Object3D[];
/**
* Up direction.
* @default THREE.Object3D.DefaultUp.clone()
*/
up: Vector3;
/**
* Object's local position.
* @default new THREE.Vector3()
*/
readonly position: Vector3;
/**
* Object's local rotation (Euler angles), in radians.
* @default new THREE.Euler()
*/
readonly rotation: Euler;
/**
* Object's local rotation as a Quaternion.
* @default new THREE.Quaternion()
*/
readonly quaternion: Quaternion;
/**
* Object's local scale.
* @default new THREE.Vector3()
*/
readonly scale: Vector3;
/**
* @default new THREE.Matrix4()
*/
readonly modelViewMatrix: Matrix4;
/**
* @default new THREE.Matrix3()
*/
readonly normalMatrix: Matrix3;
/**
* Local transform.
* @default new THREE.Matrix4()
*/
matrix: Matrix4;
/**
* The global transform of the object. If the Object3d has no parent, then it's identical to the local transform.
* @default new THREE.Matrix4()
*/
matrixWorld: Matrix4;
/**
* When this is set, it calculates the matrix of position, (rotation or quaternion) and scale every frame and also
* recalculates the matrixWorld property.
* @default THREE.Object3D.DefaultMatrixAutoUpdate
*/
matrixAutoUpdate: boolean;
/**
* When this is set, it calculates the matrixWorld in that frame and resets this property to false.
* @default false
*/
matrixWorldNeedsUpdate: boolean;
/**
* @default new THREE.Layers()
*/
layers: Layers;
/**
* Object gets rendered if true.
* @default true
*/
visible: boolean;
/**
* Gets rendered into shadow map.
* @default false
*/
castShadow: boolean;
/**
* Material gets baked in shadow receiving.
* @default false
*/
receiveShadow: boolean;
/**
* When this is set, it checks every frame if the object is in the frustum of the camera before rendering the object.
* If set to false the object gets rendered every frame even if it is not in the frustum of the camera.
* @default true
*/
frustumCulled: boolean;
/**
* Overrides the default rendering order of scene graph objects, from lowest to highest renderOrder.
* Opaque and transparent objects remain sorted independently though.
* When this property is set for an instance of Group, all descendants objects will be sorted and rendered together.
* @default 0
*/
renderOrder: number;
/**
* Array with animation clips.
* @default []
*/
animations: AnimationClip[];
/**
* An object that can be used to store custom data about the Object3d. It should not hold references to functions as these will not be cloned.
* @default {}
*/
userData: { [key: string]: any };
/**
* Custom depth material to be used when rendering to the depth map. Can only be used in context of meshes.
* When shadow-casting with a DirectionalLight or SpotLight, if you are (a) modifying vertex positions in
* the vertex shader, (b) using a displacement map, (c) using an alpha map with alphaTest, or (d) using a
* transparent texture with alphaTest, you must specify a customDepthMaterial for proper shadows.
*/
customDepthMaterial: Material;
/**
* Same as customDepthMaterial, but used with PointLight.
*/
customDistanceMaterial: Material;
/**
* Used to check whether this or derived classes are Object3Ds. Default is true.
* You should not change this, as it is used internally for optimisation.
*/
readonly isObject3D: true;
/**
* Calls before rendering object
*/
onBeforeRender: (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group) => void;
/**
* Calls after rendering object
*/
onAfterRender: (renderer: WebGLRenderer, scene: Scene, camera: Camera, geometry: BufferGeometry, material: Material, group: Group) => void;
static DefaultUp: Vector3;
static DefaultMatrixAutoUpdate: boolean;
/**
* Applies the matrix transform to the object and updates the object's position, rotation and scale.
*/
applyMatrix4(matrix: Matrix4): void;
/**
* Applies the rotation represented by the quaternion to the object.
*/
applyQuaternion(quaternion: Quaternion): this;
/**
* axis -- A normalized vector in object space.
* angle -- angle in radians
* @param axis A normalized vector in object space.
* @param angle angle in radians
*/
setRotationFromAxisAngle(axis: Vector3, angle: number): void;
/**
* Calls setRotationFromEuler(euler) on the .quaternion.
* @param euler Euler angle specifying rotation amount.
*/
setRotationFromEuler(euler: Euler): void;
/**
* Calls setFromRotationMatrix(m) on the .quaternion.
*
* Note that this assumes that the upper 3x3 of m is a pure rotation matrix (i.e, unscaled).
* @param m rotate the quaternion by the rotation component of the matrix.
*/
setRotationFromMatrix(m: Matrix4): void;
/**
* Copy the given quaternion into .quaternion.
* @param q normalized Quaternion
*/
setRotationFromQuaternion(q: Quaternion): void;
/**
* Rotate an object along an axis in object space. The axis is assumed to be normalized.
* @param axis A normalized vector in object space.
* @param angle The angle in radians.
*/
rotateOnAxis(axis: Vector3, angle: number): this;
/**
* Rotate an object along an axis in world space. The axis is assumed to be normalized. Method Assumes no rotated parent.
* @param axis A normalized vector in object space.
* @param angle The angle in radians.
*/
rotateOnWorldAxis(axis: Vector3, angle: number): this;
/**
* Rotates the object around x axis in local space.
* @param angle the angle to rotate in radians.
*/
rotateX(angle: number): this;
/**
* Rotates the object around y axis in local space.
* @param angle the angle to rotate in radians.
*/
rotateY(angle: number): this;
/**
* Rotates the object around z axis in local space.
* @param angle the angle to rotate in radians.
*/
rotateZ(angle: number): this;
/**
* Translate an object by distance along an axis in object space. The axis is assumed to be normalized.
* @param axis A normalized vector in object space.
* @param distance The distance to translate.
*/
translateOnAxis(axis: Vector3, distance: number): this;
/**
* Translates object along x axis by distance.
* @param distance Distance.
*/
translateX(distance: number): this;
/**
* Translates object along y axis by distance.
* @param distance Distance.
*/
translateY(distance: number): this;
/**
* Translates object along z axis by distance.
* @param distance Distance.
*/
translateZ(distance: number): this;
/**
* Updates the vector from local space to world space.
* @param vector A local vector.
*/
localToWorld(vector: Vector3): Vector3;
/**
* Updates the vector from world space to local space.
* @param vector A world vector.
*/
worldToLocal(vector: Vector3): Vector3;
/**
* Optionally, the x, y and z components of the world space position.
* Rotates the object to face a point in world space.
* This method does not support objects having non-uniformly-scaled parent(s).
* @param vector A world vector to look at.
*/
lookAt(vector: Vector3 | number, y?: number, z?: number): void;
/**
* Adds object as child of this object.
*/
add(...object: Object3D[]): this;
/**
* Removes object as child of this object.
*/
remove(...object: Object3D[]): this;
/**
* Removes this object from its current parent.
*/
removeFromParent(): this;
/**
* Removes all child objects.
*/
clear(): this;
/**
* Adds object as a child of this, while maintaining the object's world transform.
*/
attach(object: Object3D): this;
/**
* Searches through the object's children and returns the first with a matching id.
* @param id Unique number of the object instance
*/
getObjectById(id: number): Object3D | undefined;
/**
* Searches through the object's children and returns the first with a matching name.
* @param name String to match to the children's Object3d.name property.
*/
getObjectByName(name: string): Object3D | undefined;
getObjectByProperty(name: string, value: string): Object3D | undefined;
getWorldPosition(target: Vector3): Vector3;
getWorldQuaternion(target: Quaternion): Quaternion;
getWorldScale(target: Vector3): Vector3;
getWorldDirection(target: Vector3): Vector3;
raycast(raycaster: Raycaster, intersects: Intersection[]): void;
traverse(callback: (object: Object3D) => any): void;
traverseVisible(callback: (object: Object3D) => any): void;
traverseAncestors(callback: (object: Object3D) => any): void;
/**
* Updates local transform.
*/
updateMatrix(): void;
/**
* Updates global transform of the object and its children.
*/
updateMatrixWorld(force?: boolean): void;
/**
* Updates the global transform of the object.
* @param updateParents recursively updates global transform of ancestors.
* @param updateChildren recursively updates global transform of descendants.
*/
updateWorldMatrix(updateParents: boolean, updateChildren: boolean): void;
toJSON(meta?: { geometries: any; materials: any; textures: any; images: any }): any;
clone(recursive?: boolean): this;
/**
*
* @param object
* @param recursive
*/
copy(source: this, recursive?: boolean): this;
}
|