PlaneGeometry.js 2.0 KB
Newer Older
1
/**
M
Mr.doob 已提交
2
 * @author mrdoob / http://mrdoob.com/
M
Mr.doob 已提交
3
 * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as
4 5
 */

M
Mr.doob 已提交
6
THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) {
7

8 9
	THREE.Geometry.call( this );

M
Mr.doob 已提交
10 11 12 13 14 15 16
	this.parameters = {
		width: width,
		height: height,
		widthSegments: widthSegments,
		heightSegments: heightSegments
	};

17
	var ix, iz;
M
Mr.doob 已提交
18 19 20 21
	var width_half = width / 2;
	var height_half = height / 2;

	var gridX = widthSegments || 1;
22
	var gridZ = heightSegments || 1;
M
Mr.doob 已提交
23 24

	var gridX1 = gridX + 1;
25
	var gridZ1 = gridZ + 1;
M
Mr.doob 已提交
26 27

	var segment_width = width / gridX;
28
	var segment_height = height / gridZ;
M
Mr.doob 已提交
29

30
	var normal = new THREE.Vector3( 0, 0, 1 );
M
Mr.doob 已提交
31

32
	for ( iz = 0; iz < gridZ1; iz ++ ) {
M
Mr.doob 已提交
33

34
		var y = iz * segment_height - height_half;
M
Mr.doob 已提交
35

36
		for ( ix = 0; ix < gridX1; ix ++ ) {
M
Mr.doob 已提交
37 38 39

			var x = ix * segment_width - width_half;

40
			this.vertices.push( new THREE.Vector3( x, - y, 0 ) );
M
Mr.doob 已提交
41 42 43 44 45

		}

	}

46
	for ( iz = 0; iz < gridZ; iz ++ ) {
M
Mr.doob 已提交
47

48
		for ( ix = 0; ix < gridX; ix ++ ) {
M
Mr.doob 已提交
49

50 51 52 53
			var a = ix + gridX1 * iz;
			var b = ix + gridX1 * ( iz + 1 );
			var c = ( ix + 1 ) + gridX1 * ( iz + 1 );
			var d = ( ix + 1 ) + gridX1 * iz;
M
Mr.doob 已提交
54

55 56 57 58
			var uva = new THREE.Vector2( ix / gridX, 1 - iz / gridZ );
			var uvb = new THREE.Vector2( ix / gridX, 1 - ( iz + 1 ) / gridZ );
			var uvc = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - ( iz + 1 ) / gridZ );
			var uvd = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - iz / gridZ );
M
Mr.doob 已提交
59

60 61 62
			var face = new THREE.Face3( a, b, d );
			face.normal.copy( normal );
			face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );
M
Mr.doob 已提交
63

64 65
			this.faces.push( face );
			this.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );
M
Mr.doob 已提交
66

67 68 69
			face = new THREE.Face3( b, c, d );
			face.normal.copy( normal );
			face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );
M
Mr.doob 已提交
70

71 72
			this.faces.push( face );
			this.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );
M
Mr.doob 已提交
73 74 75 76 77

		}

	}

78
};
M
Mr.doob 已提交
79

80
THREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype );