PlaneGeometryB.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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.PlaneGeometryB = function ( width, height, widthSegments, heightSegments ) {
  6. THREE.BufferGeometry.call( this );
  7. this.width = width;
  8. this.height = height;
  9. this.widthSegments = widthSegments || 1;
  10. this.heightSegments = heightSegments || 1;
  11. var width_half = width / 2;
  12. var height_half = height / 2;
  13. var gridX = this.widthSegments;
  14. var gridY = this.heightSegments;
  15. var gridX1 = gridX + 1;
  16. var gridY1 = gridY + 1;
  17. var segment_width = this.width / gridX;
  18. var segment_height = this.height / gridY;
  19. var vertices = new Float32Array( gridX1 * gridY1 * 3 );
  20. var normals = new Float32Array( gridX1 * gridY1 * 3 );
  21. var uvs = new Float32Array( gridX1 * gridY1 * 2 );
  22. var offset = 0;
  23. var offset2 = 0;
  24. for ( var iy = 0; iy < gridY1; iy ++ ) {
  25. var y = iy * segment_height - height_half;
  26. for ( var ix = 0; ix < gridX1; ix ++ ) {
  27. var x = ix * segment_width - width_half;
  28. vertices[ offset ] = x;
  29. vertices[ offset + 1 ] = - y;
  30. normals[ offset + 2 ] = 1;
  31. uvs[ offset2 ] = ix / gridX;
  32. uvs[ offset2 + 1 ] = iy / gridY;
  33. offset += 3;
  34. offset2 += 2;
  35. }
  36. }
  37. var indices = new Uint16Array( gridX * gridY * 6 );
  38. var offset = 0;
  39. for ( var iy = 0; iy < gridY; iy ++ ) {
  40. for ( var ix = 0; ix < gridX; ix ++ ) {
  41. var a = ix + gridX1 * iy;
  42. var b = ix + gridX1 * ( iy + 1 );
  43. var c = ( ix + 1 ) + gridX1 * ( iy + 1 );
  44. var d = ( ix + 1 ) + gridX1 * iy;
  45. indices[ offset ] = a;
  46. indices[ offset + 1 ] = b;
  47. indices[ offset + 2 ] = d;
  48. indices[ offset + 3 ] = b;
  49. indices[ offset + 4 ] = c;
  50. indices[ offset + 5 ] = d;
  51. offset += 6;
  52. }
  53. }
  54. this.attributes[ 'index' ] = { array: indices, itemSize: 1 };
  55. this.attributes[ 'position' ] = { array: vertices, itemSize: 3 };
  56. this.attributes[ 'normal' ] = { array: normals, itemSize: 3 };
  57. this.attributes[ 'uv' ] = { array: uvs, itemSize: 2 };
  58. };
  59. THREE.PlaneGeometryB.prototype = Object.create( THREE.BufferGeometry.prototype );