BufferGeometryUtils.tests.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /**
  2. * @author Don McCurdy / https://www.donmccurdy.com
  3. */
  4. /* global QUnit */
  5. import * as BufferGeometryUtils from '../../../examples/js/utils/BufferGeometryUtils';
  6. export default QUnit.module( 'BufferGeometryUtils', () => {
  7. QUnit.test( 'mergeBufferAttributes - basic', ( assert ) => {
  8. var array1 = new Float32Array( [ 1, 2, 3, 4 ] );
  9. var attr1 = new THREE.BufferAttribute( array1, 2, false );
  10. var array2 = new Float32Array( [ 5, 6, 7, 8 ] );
  11. var attr2 = new THREE.BufferAttribute( array2, 2, false );
  12. var mergedAttr = THREE.BufferGeometryUtils.mergeBufferAttributes( [ attr1, attr2 ] );
  13. assert.smartEqual( Array.from( mergedAttr.array ), [ 1, 2, 3, 4, 5, 6, 7, 8 ], 'merges elements' );
  14. assert.equal( mergedAttr.itemSize, 2, 'retains .itemSize' );
  15. assert.equal( mergedAttr.normalized, false, 'retains .normalized' );
  16. } );
  17. QUnit.test( 'mergeBufferAttributes - invalid', ( assert ) => {
  18. var array1 = new Float32Array( [ 1, 2, 3, 4 ] );
  19. var attr1 = new THREE.BufferAttribute( array1, 2, false );
  20. var array2 = new Float32Array( [ 5, 6, 7, 8 ] );
  21. var attr2 = new THREE.BufferAttribute( array2, 4, false );
  22. assert.notOk( THREE.BufferGeometryUtils.mergeBufferAttributes( [ attr1, attr2 ] ) );
  23. attr2.itemSize = 2;
  24. attr2.normalized = true;
  25. assert.notOk( THREE.BufferGeometryUtils.mergeBufferAttributes( [ attr1, attr2 ] ) );
  26. attr2.normalized = false;
  27. assert.ok( THREE.BufferGeometryUtils.mergeBufferAttributes( [ attr1, attr2 ] ) );
  28. } );
  29. QUnit.test( 'mergeBufferGeometries - basic', ( assert ) => {
  30. var geometry1 = new THREE.BufferGeometry();
  31. geometry1.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 1, 2, 3 ] ), 1, false ) );
  32. var geometry2 = new THREE.BufferGeometry();
  33. geometry2.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 4, 5, 6 ] ), 1, false ) );
  34. var mergedGeometry = THREE.BufferGeometryUtils.mergeBufferGeometries( [ geometry1, geometry2 ] );
  35. assert.ok( mergedGeometry, 'merge succeeds' );
  36. assert.smartEqual( Array.from( mergedGeometry.attributes.position.array ), [ 1, 2, 3, 4, 5, 6 ], 'merges elements' );
  37. assert.equal( mergedGeometry.attributes.position.itemSize, 1, 'retains .itemSize' );
  38. } );
  39. QUnit.test( 'mergeBufferGeometries - indexed', ( assert ) => {
  40. var geometry1 = new THREE.BufferGeometry();
  41. geometry1.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 1, 2, 3 ] ), 1, false ) );
  42. geometry1.setIndex( new THREE.BufferAttribute( new Uint16Array( [ 0, 1, 2, 2, 1, 0 ] ), 1, false ) );
  43. var geometry2 = new THREE.BufferGeometry();
  44. geometry2.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 4, 5, 6 ] ), 1, false ) );
  45. geometry2.setIndex( new THREE.BufferAttribute( new Uint16Array( [ 0, 1, 2 ] ), 1, false ) );
  46. var mergedGeometry = THREE.BufferGeometryUtils.mergeBufferGeometries( [ geometry1, geometry2 ] );
  47. assert.ok( mergedGeometry, 'merge succeeds' );
  48. assert.smartEqual( Array.from( mergedGeometry.attributes.position.array ), [ 1, 2, 3, 4, 5, 6 ], 'merges elements' );
  49. assert.smartEqual( Array.from( mergedGeometry.index.array ), [ 0, 1, 2, 2, 1, 0, 3, 4, 5 ], 'merges indices' );
  50. assert.equal( mergedGeometry.attributes.position.itemSize, 1, 'retains .itemSize' );
  51. } );
  52. QUnit.test( 'mergeBufferGeometries - morph targets', ( assert ) => {
  53. var geometry1 = new THREE.BufferGeometry();
  54. geometry1.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 1, 2, 3 ] ), 1, false ) );
  55. geometry1.morphAttributes.position = [
  56. new THREE.BufferAttribute( new Float32Array( [ 10, 20, 30 ] ), 1, false ),
  57. new THREE.BufferAttribute( new Float32Array( [ 100, 200, 300 ] ), 1, false )
  58. ];
  59. var geometry2 = new THREE.BufferGeometry();
  60. geometry2.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 4, 5, 6 ] ), 1, false ) );
  61. geometry2.morphAttributes.position = [
  62. new THREE.BufferAttribute( new Float32Array( [ 40, 50, 60 ] ), 1, false ),
  63. new THREE.BufferAttribute( new Float32Array( [ 400, 500, 600 ] ), 1, false )
  64. ];
  65. var mergedGeometry = THREE.BufferGeometryUtils.mergeBufferGeometries( [ geometry1, geometry2 ] );
  66. assert.ok( mergedGeometry, 'merge succeeds' );
  67. assert.smartEqual( Array.from( mergedGeometry.attributes.position.array ), [ 1, 2, 3, 4, 5, 6 ], 'merges elements' );
  68. assert.smartEqual( Array.from( mergedGeometry.morphAttributes.position[ 0 ].array ), [ 10, 20, 30, 40, 50, 60 ], 'merges morph targets' );
  69. assert.smartEqual( Array.from( mergedGeometry.morphAttributes.position[ 1 ].array ), [ 100, 200, 300, 400, 500, 600 ], 'merges morph targets' );
  70. assert.equal( mergedGeometry.attributes.position.itemSize, 1, 'retains .itemSize' );
  71. } );
  72. QUnit.test( 'mergeBufferGeometries - invalid', ( assert ) => {
  73. var geometry1 = new THREE.BufferGeometry();
  74. geometry1.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 1, 2, 3 ] ), 1, false ) );
  75. geometry1.setIndex( new THREE.BufferAttribute( new Uint16Array( [ 0, 1, 2 ] ), 1, false ) );
  76. var geometry2 = new THREE.BufferGeometry();
  77. geometry2.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( [ 4, 5, 6 ] ), 1, false ) );
  78. assert.notOk( THREE.BufferGeometryUtils.mergeBufferGeometries( [ geometry1, geometry2 ] ) );
  79. geometry2.setIndex( new THREE.BufferAttribute( new Uint16Array( [ 0, 1, 2 ] ), 1, false ) );
  80. assert.ok( THREE.BufferGeometryUtils.mergeBufferGeometries( [ geometry1, geometry2 ] ) );
  81. geometry2.addAttribute( 'foo', new THREE.BufferAttribute( new Float32Array( [ 1, 2, 3 ] ), 1, false ) );
  82. assert.notOk( THREE.BufferGeometryUtils.mergeBufferGeometries( [ geometry1, geometry2 ] ) );
  83. } );
  84. } );