meshopt_simplifier.test.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. var assert = require('assert').strict;
  2. var simplifier = require('./meshopt_simplifier.js');
  3. process.on('unhandledRejection', error => {
  4. console.log('unhandledRejection', error);
  5. process.exit(1);
  6. });
  7. var tests = {
  8. compactMesh: function() {
  9. var indices = new Uint32Array([
  10. 0, 1, 3,
  11. 3, 1, 5,
  12. ]);
  13. var expected = new Uint32Array([
  14. 0, 1, 2,
  15. 2, 1, 3,
  16. ]);
  17. var missing = 2**32-1;
  18. var remap = new Uint32Array([
  19. 0, 1, missing, 2, missing, 3
  20. ]);
  21. var res = simplifier.compactMesh(indices);
  22. assert.deepEqual(indices, expected);
  23. assert.deepEqual(res[0], remap);
  24. assert.equal(res[1], 4); // unique
  25. },
  26. simplify: function() {
  27. // 0
  28. // 1 2
  29. // 3 4 5
  30. var indices = new Uint32Array([
  31. 0, 2, 1,
  32. 1, 2, 3,
  33. 3, 2, 4,
  34. 2, 5, 4,
  35. ]);
  36. var positions = new Float32Array([
  37. 0, 2, 0,
  38. 0, 1, 0,
  39. 1, 1, 0,
  40. 0, 0, 0,
  41. 1, 0, 0,
  42. 2, 0, 0,
  43. ]);
  44. var res = simplifier.simplify(indices, positions, 3, /* target indices */ 3, /* target error */ 0.01);
  45. var expected = new Uint32Array([
  46. 3, 0, 5,
  47. ]);
  48. assert.deepEqual(res[0], expected);
  49. assert.equal(res[1], 0); // error
  50. },
  51. simplify16: function() {
  52. // 0
  53. // 1 2
  54. // 3 4 5
  55. var indices = new Uint16Array([
  56. 0, 2, 1,
  57. 1, 2, 3,
  58. 3, 2, 4,
  59. 2, 5, 4,
  60. ]);
  61. var positions = new Float32Array([
  62. 0, 2, 0,
  63. 0, 1, 0,
  64. 1, 1, 0,
  65. 0, 0, 0,
  66. 1, 0, 0,
  67. 2, 0, 0,
  68. ]);
  69. var res = simplifier.simplify(indices, positions, 3, /* target indices */ 3, /* target error */ 0.01);
  70. var expected = new Uint16Array([
  71. 3, 0, 5,
  72. ]);
  73. assert.deepEqual(res[0], expected);
  74. assert.equal(res[1], 0); // error
  75. },
  76. simplifyLockBorder: function() {
  77. // 0
  78. // 1 2
  79. // 3 4 5
  80. var indices = new Uint32Array([
  81. 0, 2, 1,
  82. 1, 2, 3,
  83. 3, 2, 4,
  84. 2, 5, 4,
  85. ]);
  86. var positions = new Float32Array([
  87. 0, 2, 0,
  88. 0, 1, 0,
  89. 1, 1, 0,
  90. 0, 0, 0,
  91. 1, 0, 0,
  92. 2, 0, 0,
  93. ]);
  94. var res = simplifier.simplify(indices, positions, 3, /* target indices */ 3, /* target error */ 0.01, ["LockBorder"]);
  95. var expected = new Uint32Array([
  96. 0, 2, 1,
  97. 1, 2, 3,
  98. 3, 2, 4,
  99. 2, 5, 4,
  100. ]);
  101. assert.deepEqual(res[0], expected);
  102. assert.equal(res[1], 0); // error
  103. },
  104. getScale: function() {
  105. var positions = new Float32Array([
  106. 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3
  107. ]);
  108. assert(simplifier.getScale(positions, 3) == 3.0);
  109. },
  110. };
  111. Promise.all([simplifier.ready]).then(() => {
  112. var count = 0;
  113. for (var key in tests) {
  114. tests[key]();
  115. count++;
  116. }
  117. console.log(count, 'tests passed');
  118. });