提交 4cebf07e 编写于 作者: M Mr.doob

BufferGeometry based PlaneGeometry.

上级 054b9cee
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) { THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) {
THREE.Geometry.call( this ); THREE.BufferGeometry.call( this );
this.parameters = { this.parameters = {
width: width, width: width,
...@@ -14,67 +14,80 @@ THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) ...@@ -14,67 +14,80 @@ THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments )
heightSegments: heightSegments heightSegments: heightSegments
}; };
var ix, iz;
var width_half = width / 2; var width_half = width / 2;
var height_half = height / 2; var height_half = height / 2;
var gridX = widthSegments || 1; var gridX = widthSegments || 1;
var gridZ = heightSegments || 1; var gridY = heightSegments || 1;
var gridX1 = gridX + 1; var gridX1 = gridX + 1;
var gridZ1 = gridZ + 1; var gridY1 = gridY + 1;
var segment_width = width / gridX; var segment_width = width / gridX;
var segment_height = height / gridZ; var segment_height = height / gridY;
var normal = new THREE.Vector3( 0, 0, 1 ); var vertices = new Float32Array( gridX1 * gridY1 * 3 );
var normals = new Float32Array( gridX1 * gridY1 * 3 );
var uvs = new Float32Array( gridX1 * gridY1 * 2 );
for ( iz = 0; iz < gridZ1; iz ++ ) { var offset = 0;
var offset2 = 0;
var y = iz * segment_height - height_half; for ( var iy = 0; iy < gridY1; iy ++ ) {
for ( ix = 0; ix < gridX1; ix ++ ) { var y = iy * segment_height - height_half;
for ( var ix = 0; ix < gridX1; ix ++ ) {
var x = ix * segment_width - width_half; var x = ix * segment_width - width_half;
this.vertices.push( new THREE.Vector3( x, - y, 0 ) ); vertices[ offset ] = x;
vertices[ offset + 1 ] = - y;
normals[ offset + 2 ] = 1;
uvs[ offset2 ] = ix / gridX;
uvs[ offset2 + 1 ] = 1 - ( iy / gridY );
offset += 3;
offset2 += 2;
} }
} }
for ( iz = 0; iz < gridZ; iz ++ ) { offset = 0;
for ( ix = 0; ix < gridX; ix ++ ) { var indices = new Uint16Array( gridX * gridY * 6 );
var a = ix + gridX1 * iz; for ( var iy = 0; iy < gridY; iy ++ ) {
var b = ix + gridX1 * ( iz + 1 );
var c = ( ix + 1 ) + gridX1 * ( iz + 1 );
var d = ( ix + 1 ) + gridX1 * iz;
var uva = new THREE.Vector2( ix / gridX, 1 - iz / gridZ ); for ( var ix = 0; ix < gridX; ix ++ ) {
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 );
var face = new THREE.Face3( a, b, d ); var a = ix + gridX1 * iy;
face.normal.copy( normal ); var b = ix + gridX1 * ( iy + 1 );
face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() ); var c = ( ix + 1 ) + gridX1 * ( iy + 1 );
var d = ( ix + 1 ) + gridX1 * iy;
this.faces.push( face ); indices[ offset ] = a;
this.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] ); indices[ offset + 1 ] = b;
indices[ offset + 2 ] = d;
face = new THREE.Face3( b, c, d ); indices[ offset + 3 ] = b;
face.normal.copy( normal ); indices[ offset + 4 ] = c;
face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() ); indices[ offset + 5 ] = d;
this.faces.push( face ); offset += 6;
this.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );
} }
} }
this.attributes[ 'index' ] = { array: indices, itemSize: 1 };
this.attributes[ 'position' ] = { array: vertices, itemSize: 3 };
this.attributes[ 'normal' ] = { array: normals, itemSize: 3 };
this.attributes[ 'uv' ] = { array: uvs, itemSize: 2 };
}; };
THREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype ); THREE.PlaneGeometry.prototype = Object.create( THREE.BufferGeometry.prototype );
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册