Sprite.js 2.1 KB
Newer Older
A
alteredq 已提交
1 2
/**
 * @author mikael emtinger / http://gomo.se/
A
alteredq 已提交
3
 * @author alteredq / http://alteredqualia.com/
4 5
 */

M
Mr.doob 已提交
6
THREE.Sprite = ( function () {
M
Mr.doob 已提交
7

M
Mr.doob 已提交
8 9 10
	var indices = new Uint16Array( [ 0, 1, 2,  0, 2, 3 ] );
	var vertices = new Float32Array( [ - 0.5, - 0.5, 0,   0.5, - 0.5, 0,   0.5, 0.5, 0,   - 0.5, 0.5, 0 ] );
	var uvs = new Float32Array( [ 0, 0,   1, 0,   1, 1,   0, 1 ] );
M
Mr.doob 已提交
11

12
	var geometry = new THREE.BufferGeometry();
M
Mr.doob 已提交
13
	geometry.addAttribute( 'index', new THREE.BufferAttribute( indices, 1 ) );
14
	geometry.addAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
M
Mr.doob 已提交
15
	geometry.addAttribute( 'uv', new THREE.BufferAttribute( uvs, 2 ) );
16

M
Mr.doob 已提交
17
	return function ( material ) {
A
alteredq 已提交
18

M
Mr.doob 已提交
19 20
		THREE.Object3D.call( this );

21 22
		this.type = 'Sprite';

M
Mr.doob 已提交
23 24 25 26 27 28
		this.geometry = geometry;
		this.material = ( material !== undefined ) ? material : new THREE.SpriteMaterial();

	};

} )();
29

30
THREE.Sprite.prototype = Object.create( THREE.Object3D.prototype );
31
THREE.Sprite.prototype.constructor = THREE.Sprite;
32

33 34 35 36 37 38 39
THREE.Sprite.prototype.raycast = ( function () {

	var matrixPosition = new THREE.Vector3();

	return function ( raycaster, intersects ) {

		matrixPosition.setFromMatrixPosition( this.matrixWorld );
40

D
dubejf 已提交
41
		var distanceSq = raycaster.ray.distanceSqToPoint( matrixPosition );
D
dubejf 已提交
42
		var guessSizeSq = this.scale.x * this.scale.y;
43
		
D
dubejf 已提交
44
		if ( distanceSq > guessSizeSq ) {
45

46
			return;
47 48 49 50 51

		}

		intersects.push( {

D
dubejf 已提交
52
			distance: Math.sqrt( distanceSq ),
53 54 55 56 57
			point: this.position,
			face: null,
			object: this

		} );
58

59 60
	};

61
}() );
62

63 64
THREE.Sprite.prototype.clone = function ( object ) {

65
	if ( object === undefined ) object = new THREE.Sprite( this.material );
66 67 68 69 70 71 72

	THREE.Object3D.prototype.clone.call( this, object );

	return object;

};

73 74
THREE.Sprite.prototype.toJSON = function ( meta ) {

75
	var data = THREE.Object3D.prototype.toJSON.call( this, meta );
76 77 78 79 80 81 82 83

	// only serialize if not in meta materials cache
	if ( meta.materials[ this.material.uuid ] === undefined ) {
		meta.materials[ this.material.uuid ] = this.material.toJSON();
	}

	data.object.material = this.material.uuid;

84
	return data;
85 86 87

};

88 89
// Backwards compatibility

90
THREE.Particle = THREE.Sprite;