|
@@ -5,71 +5,87 @@
|
|
|
|
|
|
THREE.PlaneGeometry2 = function ( width, height, widthSegments, heightSegments ) {
|
|
THREE.PlaneGeometry2 = function ( width, height, widthSegments, heightSegments ) {
|
|
|
|
|
|
- THREE.Geometry2.call( this, ( widthSegments * heightSegments ) * 2 * 3 );
|
|
|
|
|
|
+ this.parameters = {
|
|
|
|
+ width: width,
|
|
|
|
+ height: height,
|
|
|
|
+ widthSegments: widthSegments,
|
|
|
|
+ heightSegments: heightSegments
|
|
|
|
+ };
|
|
|
|
|
|
- var vertices = this.vertices.array;
|
|
|
|
- var normals = this.normals.array;
|
|
|
|
- var uvs = this.uvs.array;
|
|
|
|
|
|
+ var width_half = width / 2;
|
|
|
|
+ var height_half = height / 2;
|
|
|
|
|
|
- this.width = width;
|
|
|
|
- this.height = height;
|
|
|
|
|
|
+ var gridX = widthSegments || 1;
|
|
|
|
+ var gridY = heightSegments || 1;
|
|
|
|
|
|
- this.widthSegments = widthSegments || 1;
|
|
|
|
- this.heightSegments = heightSegments || 1;
|
|
|
|
|
|
+ var gridX1 = gridX + 1;
|
|
|
|
+ var gridY1 = gridY + 1;
|
|
|
|
|
|
- var widthHalf = width / 2;
|
|
|
|
- var heightHalf = height / 2;
|
|
|
|
|
|
+ var segment_width = width / gridX;
|
|
|
|
+ var segment_height = height / gridY;
|
|
|
|
|
|
- var gridX = this.widthSegments;
|
|
|
|
- var gridY = this.heightSegments;
|
|
|
|
-
|
|
|
|
- var segmentWidth = this.width / gridX;
|
|
|
|
- var segmentHeight = this.height / gridY;
|
|
|
|
|
|
+ var vertices = new Float32Array( gridX1 * gridY1 * 3 );
|
|
|
|
+ var normals = new Float32Array( gridX1 * gridY1 * 3 );
|
|
|
|
+ var uvs = new Float32Array( gridX1 * gridY1 * 2 );
|
|
|
|
|
|
var offset = 0;
|
|
var offset = 0;
|
|
|
|
+ var offset2 = 0;
|
|
|
|
|
|
- for ( var iy = 0; iy < gridY; iy ++ ) {
|
|
|
|
|
|
+ for ( var iy = 0; iy < gridY1; iy ++ ) {
|
|
|
|
|
|
- var y1 = iy * segmentHeight - heightHalf;
|
|
|
|
- var y2 = ( iy + 1 ) * segmentHeight - heightHalf;
|
|
|
|
|
|
+ var y = iy * segment_height - height_half;
|
|
|
|
|
|
- for ( var ix = 0; ix < gridX; ix ++ ) {
|
|
|
|
|
|
+ for ( var ix = 0; ix < gridX1; ix ++ ) {
|
|
|
|
+
|
|
|
|
+ var x = ix * segment_width - width_half;
|
|
|
|
|
|
- var x1 = ix * segmentWidth - widthHalf;
|
|
|
|
- var x2 = ( ix + 1 ) * segmentWidth - widthHalf;
|
|
|
|
|
|
+ vertices[ offset ] = x;
|
|
|
|
+ vertices[ offset + 1 ] = - y;
|
|
|
|
|
|
- vertices[ offset + 0 ] = x1;
|
|
|
|
- vertices[ offset + 1 ] = y1;
|
|
|
|
|
|
+ normals[ offset + 2 ] = 1;
|
|
|
|
|
|
- vertices[ offset + 3 ] = x2;
|
|
|
|
- vertices[ offset + 4 ] = y1;
|
|
|
|
|
|
+ uvs[ offset2 ] = ix / gridX;
|
|
|
|
+ uvs[ offset2 + 1 ] = 1 - ( iy / gridY );
|
|
|
|
|
|
- vertices[ offset + 6 ] = x1;
|
|
|
|
- vertices[ offset + 7 ] = y2;
|
|
|
|
|
|
+ offset += 3;
|
|
|
|
+ offset2 += 2;
|
|
|
|
|
|
- normals[ offset + 2 ] = 1;
|
|
|
|
- normals[ offset + 5 ] = 1;
|
|
|
|
- normals[ offset + 8 ] = 1;
|
|
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ offset = 0;
|
|
|
|
+
|
|
|
|
+ var indices = new ( vertices.length > 65535 ? Uint32Array : Uint16Array )( gridX * gridY * 6 );
|
|
|
|
+
|
|
|
|
+ for ( var iy = 0; iy < gridY; iy ++ ) {
|
|
|
|
|
|
- vertices[ offset + 9 ] = x2;
|
|
|
|
- vertices[ offset + 10 ] = y1;
|
|
|
|
|
|
+ for ( var ix = 0; ix < gridX; ix ++ ) {
|
|
|
|
|
|
- vertices[ offset + 12 ] = x2;
|
|
|
|
- vertices[ offset + 13 ] = y2;
|
|
|
|
|
|
+ var a = ix + gridX1 * iy;
|
|
|
|
+ var b = ix + gridX1 * ( iy + 1 );
|
|
|
|
+ var c = ( ix + 1 ) + gridX1 * ( iy + 1 );
|
|
|
|
+ var d = ( ix + 1 ) + gridX1 * iy;
|
|
|
|
|
|
- vertices[ offset + 15 ] = x1;
|
|
|
|
- vertices[ offset + 16 ] = y2;
|
|
|
|
|
|
+ indices[ offset ] = a;
|
|
|
|
+ indices[ offset + 1 ] = b;
|
|
|
|
+ indices[ offset + 2 ] = d;
|
|
|
|
|
|
- normals[ offset + 11 ] = 1;
|
|
|
|
- normals[ offset + 13 ] = 1;
|
|
|
|
- normals[ offset + 17 ] = 1;
|
|
|
|
|
|
+ indices[ offset + 3 ] = b;
|
|
|
|
+ indices[ offset + 4 ] = c;
|
|
|
|
+ indices[ offset + 5 ] = d;
|
|
|
|
|
|
- offset += 18;
|
|
|
|
|
|
+ offset += 6;
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ THREE.IndexedGeometry2.call( this );
|
|
|
|
+
|
|
|
|
+ this.setArrays( indices, vertices, normals, uvs );
|
|
|
|
+ this.computeBoundingSphere();
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
-THREE.PlaneGeometry2.prototype = Object.create( THREE.Geometry2.prototype );
|
|
|
|
|
|
+THREE.PlaneGeometry.prototype = Object.create( THREE.IndexedGeometry2.prototype );
|