PlaneGeometry.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. * based on http://papervision3d.googlecode.com/svn/trunk/as3/trunk/src/org/papervision3d/objects/primitives/Plane.as
  4. */
  5. THREE.PlaneGeometry = function ( width, height, widthSegments, heightSegments ) {
  6. THREE.Geometry.call( this );
  7. this.width = width;
  8. this.height = height;
  9. this.widthSegments = widthSegments || 1;
  10. this.heightSegments = heightSegments || 1;
  11. var ix, iz;
  12. var width_half = width / 2;
  13. var height_half = height / 2;
  14. var gridX = this.widthSegments;
  15. var gridZ = this.heightSegments;
  16. var gridX1 = gridX + 1;
  17. var gridZ1 = gridZ + 1;
  18. var segment_width = this.width / gridX;
  19. var segment_height = this.height / gridZ;
  20. var normal = new THREE.Vector3( 0, 0, 1 );
  21. for ( iz = 0; iz < gridZ1; iz ++ ) {
  22. for ( ix = 0; ix < gridX1; ix ++ ) {
  23. var x = ix * segment_width - width_half;
  24. var y = iz * segment_height - height_half;
  25. this.vertices.push( new THREE.Vector3( x, - y, 0 ) );
  26. }
  27. }
  28. for ( iz = 0; iz < gridZ; iz ++ ) {
  29. for ( ix = 0; ix < gridX; ix ++ ) {
  30. var a = ix + gridX1 * iz;
  31. var b = ix + gridX1 * ( iz + 1 );
  32. var c = ( ix + 1 ) + gridX1 * ( iz + 1 );
  33. var d = ( ix + 1 ) + gridX1 * iz;
  34. var uva = new THREE.Vector2( ix / gridX, 1 - iz / gridZ );
  35. var uvb = new THREE.Vector2( ix / gridX, 1 - ( iz + 1 ) / gridZ );
  36. var uvc = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - ( iz + 1 ) / gridZ );
  37. var uvd = new THREE.Vector2( ( ix + 1 ) / gridX, 1 - iz / gridZ );
  38. var face = new THREE.Face3( a, b, d );
  39. face.normal.copy( normal );
  40. face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );
  41. this.faces.push( face );
  42. this.faceVertexUvs[ 0 ].push( [ uva, uvb, uvd ] );
  43. face = new THREE.Face3( b, c, d );
  44. face.normal.copy( normal );
  45. face.vertexNormals.push( normal.clone(), normal.clone(), normal.clone() );
  46. this.faces.push( face );
  47. this.faceVertexUvs[ 0 ].push( [ uvb.clone(), uvc, uvd.clone() ] );
  48. }
  49. }
  50. };
  51. THREE.PlaneGeometry.prototype = Object.create( THREE.Geometry.prototype );