DirectGeometry.tests.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /**
  2. * @author moraxy / https://github.com/moraxy
  3. * @author TristanVALCKE / https://github.com/Itee
  4. */
  5. /* global QUnit */
  6. import { DirectGeometry } from '../../../../src/core/DirectGeometry';
  7. import { Vector2 } from '../../../../src/math/Vector2';
  8. import { Vector3 } from '../../../../src/math/Vector3';
  9. import { Vector4 } from '../../../../src/math/Vector4';
  10. import { Color } from '../../../../src/math/Color';
  11. import { Face3 } from '../../../../src/core/Face3';
  12. import { Geometry } from '../../../../src/core/Geometry';
  13. export default QUnit.module( 'Core', () => {
  14. QUnit.module( 'DirectGeometry', () => {
  15. // INSTANCING
  16. QUnit.todo( "Instancing", ( assert ) => {
  17. assert.ok( false, "everything's gonna be alright" );
  18. } );
  19. // PUBLIC STUFF
  20. QUnit.test( "computeGroups", ( assert ) => {
  21. var a = new DirectGeometry();
  22. var b = new Geometry();
  23. var expected = [
  24. { start: 0, materialIndex: 0, count: 3 },
  25. { start: 3, materialIndex: 1, count: 3 },
  26. { start: 6, materialIndex: 2, count: 6 }
  27. ];
  28. // we only care for materialIndex
  29. b.faces.push(
  30. new Face3( 0, 0, 0, undefined, undefined, 0 ),
  31. new Face3( 0, 0, 0, undefined, undefined, 1 ),
  32. new Face3( 0, 0, 0, undefined, undefined, 2 ),
  33. new Face3( 0, 0, 0, undefined, undefined, 2 )
  34. );
  35. a.computeGroups( b );
  36. assert.deepEqual( a.groups, expected, "Groups are as expected" );
  37. } );
  38. QUnit.test( "fromGeometry", ( assert ) => {
  39. // geometry definition
  40. var geometry = new Geometry();
  41. // vertices
  42. var v1 = new Vector3( 1, - 1, 0 );
  43. var v2 = new Vector3( 1, 1, 0 );
  44. var v3 = new Vector3( - 1, 1, 0 );
  45. var v4 = new Vector3( - 1, - 1, 0 );
  46. // faces, normals and colors
  47. geometry.vertices.push( v1, v2, v3, v4 );
  48. var f1 = new Face3( 0, 1, 2 );
  49. f1.normal.set( 0, 0, 1 );
  50. f1.color.set( 0xff0000 );
  51. var f2 = new Face3( 2, 3, 0 );
  52. f2.normal.set( 0, 0, 1 );
  53. f2.color.set( 0xff0000 );
  54. geometry.faces.push( f1, f2 );
  55. // uvs
  56. var uvs = geometry.faceVertexUvs[ 0 ];
  57. uvs.length = 0;
  58. uvs.push( [
  59. new Vector2( 1, 0 ),
  60. new Vector2( 1, 1 ),
  61. new Vector2( 0, 1 )
  62. ] );
  63. uvs.push( [
  64. new Vector2( 0, 1 ),
  65. new Vector2( 0, 0 ),
  66. new Vector2( 1, 0 )
  67. ] );
  68. // skin weights
  69. var sw1 = new Vector4( 0.8, 0.2, 0, 0 );
  70. var sw2 = new Vector4( 0.7, 0.2, 0.1, 0 );
  71. var sw3 = new Vector4( 0.8, 0.1, 0.1, 0 );
  72. var sw4 = new Vector4( 1, 0, 0, 0 );
  73. geometry.skinWeights.push( sw1, sw2, sw3, sw4 );
  74. // skin indices
  75. var si1 = new Vector4( 0, 1, 2, 3 );
  76. var si2 = new Vector4( 2, 3, 4, 5 );
  77. var si3 = new Vector4( 4, 5, 6, 7 );
  78. var si4 = new Vector4( 6, 7, 8, 9 );
  79. geometry.skinIndices.push( si1, si2, si3, si4 );
  80. // create DirectGeometry
  81. var directGeometry = new DirectGeometry().fromGeometry( geometry );
  82. // expected values
  83. var vertices = [
  84. // first face
  85. new Vector3( 1, - 1, 0 ),
  86. new Vector3( 1, 1, 0 ),
  87. new Vector3( - 1, 1, 0 ),
  88. // second face
  89. new Vector3( - 1, 1, 0 ),
  90. new Vector3( - 1, - 1, 0 ),
  91. new Vector3( 1, - 1, 0 )
  92. ];
  93. var normals = [
  94. // first face
  95. new Vector3( 0, 0, 1 ),
  96. new Vector3( 0, 0, 1 ),
  97. new Vector3( 0, 0, 1 ),
  98. // second face
  99. new Vector3( 0, 0, 1 ),
  100. new Vector3( 0, 0, 1 ),
  101. new Vector3( 0, 0, 1 )
  102. ];
  103. var colors = [
  104. // first face
  105. new Color( 1, 0, 0 ),
  106. new Color( 1, 0, 0 ),
  107. new Color( 1, 0, 0 ),
  108. // second face
  109. new Color( 1, 0, 0 ),
  110. new Color( 1, 0, 0 ),
  111. new Color( 1, 0, 0 )
  112. ];
  113. var uvs = [
  114. // first face
  115. new Vector2( 1, 0 ),
  116. new Vector2( 1, 1 ),
  117. new Vector2( 0, 1 ),
  118. // second face
  119. new Vector2( 0, 1 ),
  120. new Vector2( 0, 0 ),
  121. new Vector2( 1, 0 )
  122. ];
  123. var skinIndices = [
  124. // first face
  125. new Vector4( 0, 1, 2, 3 ),
  126. new Vector4( 2, 3, 4, 5 ),
  127. new Vector4( 4, 5, 6, 7 ),
  128. // second face
  129. new Vector4( 4, 5, 6, 7 ),
  130. new Vector4( 6, 7, 8, 9 ),
  131. new Vector4( 0, 1, 2, 3 )
  132. ];
  133. var skinWeights = [
  134. // first face
  135. new Vector4( 0.8, 0.2, 0, 0 ),
  136. new Vector4( 0.7, 0.2, 0.1, 0 ),
  137. new Vector4( 0.8, 0.1, 0.1, 0 ),
  138. // second face
  139. new Vector4( 0.8, 0.1, 0.1, 0 ),
  140. new Vector4( 1, 0, 0, 0 ),
  141. new Vector4( 0.8, 0.2, 0, 0 )
  142. ];
  143. assert.deepEqual( directGeometry.vertices, vertices, "Vertices are as expected" );
  144. assert.deepEqual( directGeometry.normals, normals, "Normals are as expected" );
  145. assert.deepEqual( directGeometry.colors, colors, "Colors are as expected" );
  146. assert.deepEqual( directGeometry.uvs, uvs, "Texture coordinates are as expected" );
  147. assert.deepEqual( directGeometry.skinIndices, skinIndices, "Skin indices are as expected" );
  148. assert.deepEqual( directGeometry.skinWeights, skinWeights, "Skin weights are as expected" );
  149. } );
  150. } );
  151. } );