Spaces:
Running
Running
| /** | |
| * @author mrdoob / http://mrdoob.com/ | |
| * @author Mugen87 / https://github.com/Mugen87 | |
| */ | |
| import { Geometry } from '../core/Geometry.js'; | |
| import { BufferGeometry } from '../core/BufferGeometry.js'; | |
| import { Float32BufferAttribute } from '../core/BufferAttribute.js'; | |
| // PlaneGeometry | |
| 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; | |
| // PlaneBufferGeometry | |
| 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; | |
| // buffers | |
| var indices = []; | |
| var vertices = []; | |
| var normals = []; | |
| var uvs = []; | |
| // generate vertices, normals and 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 ) ); | |
| } | |
| } | |
| // indices | |
| 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; | |
| // faces | |
| indices.push( a, b, d ); | |
| indices.push( b, c, d ); | |
| } | |
| } | |
| // build geometry | |
| 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 }; | |