| |
| |
| |
| |
|
|
| import { Geometry } from '../core/Geometry.js'; |
| import { BufferGeometry } from '../core/BufferGeometry.js'; |
| import { Float32BufferAttribute } from '../core/BufferAttribute.js'; |
|
|
| |
|
|
| function PlaneGeometry( width, height, widthSegments, heightSegments ) { |
|
|
| Geometry.call( this ); |
|
|
| this.type = 'PlaneGeometry'; |
|
|
| this.parameters = { |
| width: width, |
| height: height, |
| widthSegments: widthSegments, |
| heightSegments: heightSegments |
| }; |
|
|
| this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); |
| this.mergeVertices(); |
|
|
| } |
|
|
| PlaneGeometry.prototype = Object.create( Geometry.prototype ); |
| PlaneGeometry.prototype.constructor = PlaneGeometry; |
|
|
| |
|
|
| function PlaneBufferGeometry( width, height, widthSegments, heightSegments ) { |
|
|
| BufferGeometry.call( this ); |
|
|
| this.type = 'PlaneBufferGeometry'; |
|
|
| this.parameters = { |
| width: width, |
| height: height, |
| widthSegments: widthSegments, |
| heightSegments: heightSegments |
| }; |
|
|
| width = width || 1; |
| height = height || 1; |
|
|
| var width_half = width / 2; |
| var height_half = height / 2; |
|
|
| var gridX = Math.floor( widthSegments ) || 1; |
| var gridY = Math.floor( heightSegments ) || 1; |
|
|
| var gridX1 = gridX + 1; |
| var gridY1 = gridY + 1; |
|
|
| var segment_width = width / gridX; |
| var segment_height = height / gridY; |
|
|
| var ix, iy; |
|
|
| |
|
|
| var indices = []; |
| var vertices = []; |
| var normals = []; |
| var uvs = []; |
|
|
| |
|
|
| for ( iy = 0; iy < gridY1; iy ++ ) { |
|
|
| var y = iy * segment_height - height_half; |
|
|
| for ( ix = 0; ix < gridX1; ix ++ ) { |
|
|
| var x = ix * segment_width - width_half; |
|
|
| vertices.push( x, - y, 0 ); |
|
|
| normals.push( 0, 0, 1 ); |
|
|
| uvs.push( ix / gridX ); |
| uvs.push( 1 - ( iy / gridY ) ); |
|
|
| } |
|
|
| } |
|
|
| |
|
|
| for ( iy = 0; iy < gridY; iy ++ ) { |
|
|
| for ( ix = 0; ix < gridX; ix ++ ) { |
|
|
| var a = ix + gridX1 * iy; |
| var b = ix + gridX1 * ( iy + 1 ); |
| var c = ( ix + 1 ) + gridX1 * ( iy + 1 ); |
| var d = ( ix + 1 ) + gridX1 * iy; |
|
|
| |
|
|
| indices.push( a, b, d ); |
| indices.push( b, c, d ); |
|
|
| } |
|
|
| } |
|
|
| |
|
|
| this.setIndex( indices ); |
| this.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); |
| this.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); |
| this.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); |
|
|
| } |
|
|
| PlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); |
| PlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry; |
|
|
|
|
| export { PlaneGeometry, PlaneBufferGeometry }; |
|
|