Box3.tests.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622
  1. /* global QUnit */
  2. import { Box3 } from '../../../../src/math/Box3';
  3. import { Sphere } from '../../../../src/math/Sphere';
  4. import { Triangle } from '../../../../src/math/Triangle';
  5. import { Plane } from '../../../../src/math/Plane';
  6. import { Vector3 } from '../../../../src/math/Vector3';
  7. import { Matrix4 } from '../../../../src/math/Matrix4';
  8. import { Mesh } from '../../../../src/objects/Mesh';
  9. import { BufferAttribute } from '../../../../src/core/BufferAttribute';
  10. import {
  11. BoxGeometry,
  12. BoxBufferGeometry
  13. } from '../../../../src/geometries/BoxGeometry';
  14. import {
  15. negInf3,
  16. posInf3,
  17. zero3,
  18. one3,
  19. two3
  20. } from './Constants.tests';
  21. function compareBox( a, b, threshold ) {
  22. threshold = threshold || 0.0001;
  23. return ( a.min.distanceTo( b.min ) < threshold &&
  24. a.max.distanceTo( b.max ) < threshold );
  25. }
  26. export default QUnit.module( 'Maths', () => {
  27. QUnit.module( 'Box3', () => {
  28. // INSTANCING
  29. QUnit.test( "Instancing", ( assert ) => {
  30. var a = new Box3();
  31. assert.ok( a.min.equals( posInf3 ), "Passed!" );
  32. assert.ok( a.max.equals( negInf3 ), "Passed!" );
  33. var a = new Box3( zero3.clone(), zero3.clone() );
  34. assert.ok( a.min.equals( zero3 ), "Passed!" );
  35. assert.ok( a.max.equals( zero3 ), "Passed!" );
  36. var a = new Box3( zero3.clone(), one3.clone() );
  37. assert.ok( a.min.equals( zero3 ), "Passed!" );
  38. assert.ok( a.max.equals( one3 ), "Passed!" );
  39. } );
  40. // PUBLIC STUFF
  41. QUnit.test( "isBox3", ( assert ) => {
  42. var a = new Box3();
  43. assert.ok( a.isBox3 === true, "Passed!" );
  44. var b = new Sphere();
  45. assert.ok( ! b.isBox3, "Passed!" );
  46. } );
  47. QUnit.test( "set", ( assert ) => {
  48. var a = new Box3();
  49. a.set( zero3, one3 );
  50. assert.ok( a.min.equals( zero3 ), "Passed!" );
  51. assert.ok( a.max.equals( one3 ), "Passed!" );
  52. } );
  53. QUnit.test( "setFromArray", ( assert ) => {
  54. var a = new Box3();
  55. a.setFromArray( [ 0, 0, 0, 1, 1, 1, 2, 2, 2 ] );
  56. assert.ok( a.min.equals( zero3 ), "Passed!" );
  57. assert.ok( a.max.equals( two3 ), "Passed!" );
  58. } );
  59. QUnit.test( "setFromBufferAttribute", ( assert ) => {
  60. var a = new Box3( zero3.clone(), one3.clone() );
  61. var bigger = new BufferAttribute( new Float32Array( [
  62. - 2, - 2, - 2, 2, 2, 2, 1.5, 1.5, 1.5, 0, 0, 0
  63. ] ), 3 );
  64. var smaller = new BufferAttribute( new Float32Array( [
  65. - 0.5, - 0.5, - 0.5, 0.5, 0.5, 0.5, 0, 0, 0
  66. ] ), 3 );
  67. var newMin = new Vector3( - 2, - 2, - 2 );
  68. var newMax = new Vector3( 2, 2, 2 );
  69. a.setFromBufferAttribute( bigger );
  70. assert.ok( a.min.equals( newMin ), "Bigger box: correct new minimum" );
  71. assert.ok( a.max.equals( newMax ), "Bigger box: correct new maximum" );
  72. newMin.set( - 0.5, - 0.5, - 0.5 );
  73. newMax.set( 0.5, 0.5, 0.5 );
  74. a.setFromBufferAttribute( smaller );
  75. assert.ok( a.min.equals( newMin ), "Smaller box: correct new minimum" );
  76. assert.ok( a.max.equals( newMax ), "Smaller box: correct new maximum" );
  77. } );
  78. QUnit.test( "setFromPoints", ( assert ) => {
  79. var a = new Box3();
  80. a.setFromPoints( [ zero3, one3, two3 ] );
  81. assert.ok( a.min.equals( zero3 ), "Passed!" );
  82. assert.ok( a.max.equals( two3 ), "Passed!" );
  83. a.setFromPoints( [ one3 ] );
  84. assert.ok( a.min.equals( one3 ), "Passed!" );
  85. assert.ok( a.max.equals( one3 ), "Passed!" );
  86. a.setFromPoints( [] );
  87. assert.ok( a.isEmpty(), "Passed!" );
  88. } );
  89. QUnit.test( "setFromCenterAndSize", ( assert ) => {
  90. var a = new Box3( zero3.clone(), one3.clone() );
  91. var b = a.clone();
  92. var centerA = new Vector3();
  93. var sizeA = new Vector3();
  94. var sizeB = new Vector3();
  95. var newCenter = one3;
  96. var newSize = two3;
  97. a.getCenter( centerA );
  98. a.getSize( sizeA );
  99. a.setFromCenterAndSize( centerA, sizeA );
  100. assert.ok( a.equals( b ), "Same values: no changes" );
  101. a.setFromCenterAndSize( newCenter, sizeA );
  102. a.getCenter( centerA );
  103. a.getSize( sizeA );
  104. b.getSize( sizeB );
  105. assert.ok( centerA.equals( newCenter ), "Move center: correct new center" );
  106. assert.ok( sizeA.equals( sizeB ), "Move center: no change in size" );
  107. assert.notOk( a.equals( b ), "Move center: no longer equal to old values" );
  108. a.setFromCenterAndSize( centerA, newSize );
  109. a.getCenter( centerA );
  110. a.getSize( sizeA );
  111. assert.ok( centerA.equals( newCenter ), "Resize: no change to center" );
  112. assert.ok( sizeA.equals( newSize ), "Resize: correct new size" );
  113. assert.notOk( a.equals( b ), "Resize: no longer equal to old values" );
  114. } );
  115. QUnit.test( "setFromObject/BufferGeometry", ( assert ) => {
  116. var a = new Box3( zero3.clone(), one3.clone() );
  117. var object = new Mesh( new BoxBufferGeometry( 2, 2, 2 ) );
  118. var child = new Mesh( new BoxBufferGeometry( 1, 1, 1 ) );
  119. object.add( child );
  120. a.setFromObject( object );
  121. assert.ok( a.min.equals( new Vector3( - 1, - 1, - 1 ) ), "Correct new minimum" );
  122. assert.ok( a.max.equals( new Vector3( 1, 1, 1 ) ), "Correct new maximum" );
  123. } );
  124. QUnit.test( "clone", ( assert ) => {
  125. var a = new Box3( zero3.clone(), one3.clone() );
  126. var b = a.clone();
  127. assert.ok( b.min.equals( zero3 ), "Passed!" );
  128. assert.ok( b.max.equals( one3 ), "Passed!" );
  129. a = new Box3();
  130. var b = a.clone();
  131. assert.ok( b.min.equals( posInf3 ), "Passed!" );
  132. assert.ok( b.max.equals( negInf3 ), "Passed!" );
  133. } );
  134. QUnit.test( "copy", ( assert ) => {
  135. var a = new Box3( zero3.clone(), one3.clone() );
  136. var b = new Box3().copy( a );
  137. assert.ok( b.min.equals( zero3 ), "Passed!" );
  138. assert.ok( b.max.equals( one3 ), "Passed!" );
  139. // ensure that it is a true copy
  140. a.min = zero3;
  141. a.max = one3;
  142. assert.ok( b.min.equals( zero3 ), "Passed!" );
  143. assert.ok( b.max.equals( one3 ), "Passed!" );
  144. } );
  145. QUnit.test( "empty/makeEmpty", ( assert ) => {
  146. var a = new Box3();
  147. assert.ok( a.isEmpty(), "Passed!" );
  148. var a = new Box3( zero3.clone(), one3.clone() );
  149. assert.ok( ! a.isEmpty(), "Passed!" );
  150. a.makeEmpty();
  151. assert.ok( a.isEmpty(), "Passed!" );
  152. } );
  153. QUnit.test( "isEmpty", ( assert ) => {
  154. var a = new Box3( zero3.clone(), zero3.clone() );
  155. assert.ok( ! a.isEmpty(), "Passed!" );
  156. var a = new Box3( zero3.clone(), one3.clone() );
  157. assert.ok( ! a.isEmpty(), "Passed!" );
  158. var a = new Box3( two3.clone(), one3.clone() );
  159. assert.ok( a.isEmpty(), "Passed!" );
  160. var a = new Box3( posInf3.clone(), negInf3.clone() );
  161. assert.ok( a.isEmpty(), "Passed!" );
  162. } );
  163. QUnit.test( "getCenter", ( assert ) => {
  164. var a = new Box3( zero3.clone(), zero3.clone() );
  165. var center = new Vector3();
  166. assert.ok( a.getCenter( center ).equals( zero3 ), "Passed!" );
  167. var a = new Box3( zero3.clone(), one3.clone() );
  168. var midpoint = one3.clone().multiplyScalar( 0.5 );
  169. assert.ok( a.getCenter( center ).equals( midpoint ), "Passed!" );
  170. } );
  171. QUnit.test( "getSize", ( assert ) => {
  172. var a = new Box3( zero3.clone(), zero3.clone() );
  173. var size = new Vector3();
  174. assert.ok( a.getSize( size ).equals( zero3 ), "Passed!" );
  175. var a = new Box3( zero3.clone(), one3.clone() );
  176. assert.ok( a.getSize( size ).equals( one3 ), "Passed!" );
  177. } );
  178. QUnit.test( "expandByPoint", ( assert ) => {
  179. var a = new Box3( zero3.clone(), zero3.clone() );
  180. var center = new Vector3();
  181. var size = new Vector3();
  182. a.expandByPoint( zero3 );
  183. assert.ok( a.getSize( size ).equals( zero3 ), "Passed!" );
  184. a.expandByPoint( one3 );
  185. assert.ok( a.getSize( size ).equals( one3 ), "Passed!" );
  186. a.expandByPoint( one3.clone().negate() );
  187. assert.ok( a.getSize( size ).equals( one3.clone().multiplyScalar( 2 ) ), "Passed!" );
  188. assert.ok( a.getCenter( center ).equals( zero3 ), "Passed!" );
  189. } );
  190. QUnit.test( "expandByVector", ( assert ) => {
  191. var a = new Box3( zero3.clone(), zero3.clone() );
  192. var center = new Vector3();
  193. var size = new Vector3();
  194. a.expandByVector( zero3 );
  195. assert.ok( a.getSize( size ).equals( zero3 ), "Passed!" );
  196. a.expandByVector( one3 );
  197. assert.ok( a.getSize( size ).equals( one3.clone().multiplyScalar( 2 ) ), "Passed!" );
  198. assert.ok( a.getCenter( center ).equals( zero3 ), "Passed!" );
  199. } );
  200. QUnit.test( "expandByScalar", ( assert ) => {
  201. var a = new Box3( zero3.clone(), zero3.clone() );
  202. var center = new Vector3();
  203. var size = new Vector3();
  204. a.expandByScalar( 0 );
  205. assert.ok( a.getSize( size ).equals( zero3 ), "Passed!" );
  206. a.expandByScalar( 1 );
  207. assert.ok( a.getSize( size ).equals( one3.clone().multiplyScalar( 2 ) ), "Passed!" );
  208. assert.ok( a.getCenter( center ).equals( zero3 ), "Passed!" );
  209. } );
  210. QUnit.test( "expandByObject", ( assert ) => {
  211. var a = new Box3( zero3.clone(), one3.clone() );
  212. var b = a.clone();
  213. var bigger = new Mesh( new BoxGeometry( 2, 2, 2 ) );
  214. var smaller = new Mesh( new BoxGeometry( 0.5, 0.5, 0.5 ) );
  215. var child = new Mesh( new BoxGeometry( 1, 1, 1 ) );
  216. // just a bigger box to begin with
  217. a.expandByObject( bigger );
  218. assert.ok( a.min.equals( new Vector3( - 1, - 1, - 1 ) ), "Bigger box: correct new minimum" );
  219. assert.ok( a.max.equals( new Vector3( 1, 1, 1 ) ), "Bigger box: correct new maximum" );
  220. // a translated, bigger box
  221. a.copy( b );
  222. bigger.translateX( 2 );
  223. a.expandByObject( bigger );
  224. assert.ok( a.min.equals( new Vector3( 0, - 1, - 1 ) ), "Translated, bigger box: correct new minimum" );
  225. assert.ok( a.max.equals( new Vector3( 3, 1, 1 ) ), "Translated, bigger box: correct new maximum" );
  226. // a translated, bigger box with child
  227. a.copy( b );
  228. bigger.add( child );
  229. a.expandByObject( bigger );
  230. assert.ok( a.min.equals( new Vector3( 0, - 1, - 1 ) ), "Translated, bigger box with child: correct new minimum" );
  231. assert.ok( a.max.equals( new Vector3( 3, 1, 1 ) ), "Translated, bigger box with child: correct new maximum" );
  232. // a translated, bigger box with a translated child
  233. a.copy( b );
  234. child.translateX( 2 );
  235. a.expandByObject( bigger );
  236. assert.ok( a.min.equals( new Vector3( 0, - 1, - 1 ) ), "Translated, bigger box with translated child: correct new minimum" );
  237. assert.ok( a.max.equals( new Vector3( 4.5, 1, 1 ) ), "Translated, bigger box with translated child: correct new maximum" );
  238. // a smaller box
  239. a.copy( b );
  240. a.expandByObject( smaller );
  241. assert.ok( a.min.equals( new Vector3( - 0.25, - 0.25, - 0.25 ) ), "Smaller box: correct new minimum" );
  242. assert.ok( a.max.equals( new Vector3( 1, 1, 1 ) ), "Smaller box: correct new maximum" );
  243. //
  244. assert.ok( new Box3().expandByObject( new Mesh() ).isEmpty() === true, "The AABB of a mesh with inital geometry is empty." );
  245. } );
  246. QUnit.test( "containsPoint", ( assert ) => {
  247. var a = new Box3( zero3.clone(), zero3.clone() );
  248. assert.ok( a.containsPoint( zero3 ), "Passed!" );
  249. assert.ok( ! a.containsPoint( one3 ), "Passed!" );
  250. a.expandByScalar( 1 );
  251. assert.ok( a.containsPoint( zero3 ), "Passed!" );
  252. assert.ok( a.containsPoint( one3 ), "Passed!" );
  253. assert.ok( a.containsPoint( one3.clone().negate() ), "Passed!" );
  254. } );
  255. QUnit.test( "containsBox", ( assert ) => {
  256. var a = new Box3( zero3.clone(), zero3.clone() );
  257. var b = new Box3( zero3.clone(), one3.clone() );
  258. var c = new Box3( one3.clone().negate(), one3.clone() );
  259. assert.ok( a.containsBox( a ), "Passed!" );
  260. assert.ok( ! a.containsBox( b ), "Passed!" );
  261. assert.ok( ! a.containsBox( c ), "Passed!" );
  262. assert.ok( b.containsBox( a ), "Passed!" );
  263. assert.ok( c.containsBox( a ), "Passed!" );
  264. assert.ok( ! b.containsBox( c ), "Passed!" );
  265. } );
  266. QUnit.test( "getParameter", ( assert ) => {
  267. var a = new Box3( zero3.clone(), one3.clone() );
  268. var b = new Box3( one3.clone().negate(), one3.clone() );
  269. var parameter = new Vector3();
  270. a.getParameter( zero3, parameter );
  271. assert.ok( parameter.equals( zero3 ), "Passed!" );
  272. a.getParameter( one3, parameter );
  273. assert.ok( parameter.equals( one3 ), "Passed!" );
  274. b.getParameter( one3.clone().negate(), parameter );
  275. assert.ok( parameter.equals( zero3 ), "Passed!" );
  276. b.getParameter( zero3, parameter );
  277. assert.ok( parameter.equals( new Vector3( 0.5, 0.5, 0.5 ) ), "Passed!" );
  278. b.getParameter( one3, parameter );
  279. assert.ok( parameter.equals( one3 ), "Passed!" );
  280. } );
  281. QUnit.test( "intersectsBox", ( assert ) => {
  282. var a = new Box3( zero3.clone(), zero3.clone() );
  283. var b = new Box3( zero3.clone(), one3.clone() );
  284. var c = new Box3( one3.clone().negate(), one3.clone() );
  285. assert.ok( a.intersectsBox( a ), "Passed!" );
  286. assert.ok( a.intersectsBox( b ), "Passed!" );
  287. assert.ok( a.intersectsBox( c ), "Passed!" );
  288. assert.ok( b.intersectsBox( a ), "Passed!" );
  289. assert.ok( c.intersectsBox( a ), "Passed!" );
  290. assert.ok( b.intersectsBox( c ), "Passed!" );
  291. b.translate( new Vector3( 2, 2, 2 ) );
  292. assert.ok( ! a.intersectsBox( b ), "Passed!" );
  293. assert.ok( ! b.intersectsBox( a ), "Passed!" );
  294. assert.ok( ! b.intersectsBox( c ), "Passed!" );
  295. } );
  296. QUnit.test( "intersectsSphere", ( assert ) => {
  297. var a = new Box3( zero3.clone(), one3.clone() );
  298. var b = new Sphere( zero3.clone(), 1 );
  299. assert.ok( a.intersectsSphere( b ), "Passed!" );
  300. b.translate( new Vector3( 2, 2, 2 ) );
  301. assert.ok( ! a.intersectsSphere( b ), "Passed!" );
  302. } );
  303. QUnit.test( "intersectsPlane", ( assert ) => {
  304. var a = new Box3( zero3.clone(), one3.clone() );
  305. var b = new Plane( new Vector3( 0, 1, 0 ), 1 );
  306. var c = new Plane( new Vector3( 0, 1, 0 ), 1.25 );
  307. var d = new Plane( new Vector3( 0, - 1, 0 ), 1.25 );
  308. var e = new Plane( new Vector3( 0, 1, 0 ), 0.25 );
  309. var f = new Plane( new Vector3( 0, 1, 0 ), - 0.25 );
  310. var g = new Plane( new Vector3( 0, 1, 0 ), - 0.75 );
  311. var h = new Plane( new Vector3( 0, 1, 0 ), - 1 );
  312. var i = new Plane( new Vector3( 1, 1, 1 ).normalize(), - 1.732 );
  313. var j = new Plane( new Vector3( 1, 1, 1 ).normalize(), - 1.733 );
  314. assert.ok( ! a.intersectsPlane( b ), "Passed!" );
  315. assert.ok( ! a.intersectsPlane( c ), "Passed!" );
  316. assert.ok( ! a.intersectsPlane( d ), "Passed!" );
  317. assert.ok( ! a.intersectsPlane( e ), "Passed!" );
  318. assert.ok( a.intersectsPlane( f ), "Passed!" );
  319. assert.ok( a.intersectsPlane( g ), "Passed!" );
  320. assert.ok( a.intersectsPlane( h ), "Passed!" );
  321. assert.ok( a.intersectsPlane( i ), "Passed!" );
  322. assert.ok( ! a.intersectsPlane( j ), "Passed!" );
  323. } );
  324. QUnit.test( "intersectsTriangle", ( assert ) => {
  325. var a = new Box3( one3.clone(), two3.clone() );
  326. var b = new Triangle( new Vector3( 1.5, 1.5, 2.5 ), new Vector3( 2.5, 1.5, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
  327. var c = new Triangle( new Vector3( 1.5, 1.5, 3.5 ), new Vector3( 3.5, 1.5, 1.5 ), new Vector3( 1.5, 1.5, 1.5 ) );
  328. var d = new Triangle( new Vector3( 1.5, 1.75, 3 ), new Vector3( 3, 1.75, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
  329. var e = new Triangle( new Vector3( 1.5, 1.8, 3 ), new Vector3( 3, 1.8, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
  330. var f = new Triangle( new Vector3( 1.5, 2.5, 3 ), new Vector3( 3, 2.5, 1.5 ), new Vector3( 1.5, 2.5, 1.5 ) );
  331. assert.ok( a.intersectsTriangle( b ), "Passed!" );
  332. assert.ok( a.intersectsTriangle( c ), "Passed!" );
  333. assert.ok( a.intersectsTriangle( d ), "Passed!" );
  334. assert.ok( ! a.intersectsTriangle( e ), "Passed!" );
  335. assert.ok( ! a.intersectsTriangle( f ), "Passed!" );
  336. } );
  337. QUnit.test( "clampPoint", ( assert ) => {
  338. var a = new Box3( zero3.clone(), zero3.clone() );
  339. var b = new Box3( one3.clone().negate(), one3.clone() );
  340. var point = new Vector3();
  341. a.clampPoint( zero3, point );
  342. assert.ok( point.equals( zero3 ), "Passed!" );
  343. a.clampPoint( one3, point );
  344. assert.ok( point.equals( zero3 ), "Passed!" );
  345. a.clampPoint( one3.clone().negate(), point );
  346. assert.ok( point.equals( zero3 ), "Passed!" );
  347. b.clampPoint( new Vector3( 2, 2, 2 ), point );
  348. assert.ok( point.equals( one3 ), "Passed!" );
  349. b.clampPoint( one3, point );
  350. assert.ok( point.equals( one3 ), "Passed!" );
  351. b.clampPoint( zero3, point );
  352. assert.ok( point.equals( zero3 ), "Passed!" );
  353. b.clampPoint( one3.clone().negate(), point );
  354. assert.ok( point.equals( one3.clone().negate() ), "Passed!" );
  355. b.clampPoint( new Vector3( - 2, - 2, - 2 ), point );
  356. assert.ok( point.equals( one3.clone().negate() ), "Passed!" );
  357. } );
  358. QUnit.test( "distanceToPoint", ( assert ) => {
  359. var a = new Box3( zero3.clone(), zero3.clone() );
  360. var b = new Box3( one3.clone().negate(), one3.clone() );
  361. assert.ok( a.distanceToPoint( new Vector3( 0, 0, 0 ) ) == 0, "Passed!" );
  362. assert.ok( a.distanceToPoint( new Vector3( 1, 1, 1 ) ) == Math.sqrt( 3 ), "Passed!" );
  363. assert.ok( a.distanceToPoint( new Vector3( - 1, - 1, - 1 ) ) == Math.sqrt( 3 ), "Passed!" );
  364. assert.ok( b.distanceToPoint( new Vector3( 2, 2, 2 ) ) == Math.sqrt( 3 ), "Passed!" );
  365. assert.ok( b.distanceToPoint( new Vector3( 1, 1, 1 ) ) == 0, "Passed!" );
  366. assert.ok( b.distanceToPoint( new Vector3( 0, 0, 0 ) ) == 0, "Passed!" );
  367. assert.ok( b.distanceToPoint( new Vector3( - 1, - 1, - 1 ) ) == 0, "Passed!" );
  368. assert.ok( b.distanceToPoint( new Vector3( - 2, - 2, - 2 ) ) == Math.sqrt( 3 ), "Passed!" );
  369. } );
  370. QUnit.test( "getBoundingSphere", ( assert ) => {
  371. var a = new Box3( zero3.clone(), zero3.clone() );
  372. var b = new Box3( zero3.clone(), one3.clone() );
  373. var c = new Box3( one3.clone().negate(), one3.clone() );
  374. var sphere = new Sphere();
  375. assert.ok( a.getBoundingSphere( sphere ).equals( new Sphere( zero3, 0 ) ), "Passed!" );
  376. assert.ok( b.getBoundingSphere( sphere ).equals( new Sphere( one3.clone().multiplyScalar( 0.5 ), Math.sqrt( 3 ) * 0.5 ) ), "Passed!" );
  377. assert.ok( c.getBoundingSphere( sphere ).equals( new Sphere( zero3, Math.sqrt( 12 ) * 0.5 ) ), "Passed!" );
  378. } );
  379. QUnit.test( "intersect", ( assert ) => {
  380. var a = new Box3( zero3.clone(), zero3.clone() );
  381. var b = new Box3( zero3.clone(), one3.clone() );
  382. var c = new Box3( one3.clone().negate(), one3.clone() );
  383. assert.ok( a.clone().intersect( a ).equals( a ), "Passed!" );
  384. assert.ok( a.clone().intersect( b ).equals( a ), "Passed!" );
  385. assert.ok( b.clone().intersect( b ).equals( b ), "Passed!" );
  386. assert.ok( a.clone().intersect( c ).equals( a ), "Passed!" );
  387. assert.ok( b.clone().intersect( c ).equals( b ), "Passed!" );
  388. assert.ok( c.clone().intersect( c ).equals( c ), "Passed!" );
  389. } );
  390. QUnit.test( "union", ( assert ) => {
  391. var a = new Box3( zero3.clone(), zero3.clone() );
  392. var b = new Box3( zero3.clone(), one3.clone() );
  393. var c = new Box3( one3.clone().negate(), one3.clone() );
  394. assert.ok( a.clone().union( a ).equals( a ), "Passed!" );
  395. assert.ok( a.clone().union( b ).equals( b ), "Passed!" );
  396. assert.ok( a.clone().union( c ).equals( c ), "Passed!" );
  397. assert.ok( b.clone().union( c ).equals( c ), "Passed!" );
  398. } );
  399. QUnit.test( "applyMatrix4", ( assert ) => {
  400. var a = new Box3( zero3.clone(), zero3.clone() );
  401. var b = new Box3( zero3.clone(), one3.clone() );
  402. var c = new Box3( one3.clone().negate(), one3.clone() );
  403. var d = new Box3( one3.clone().negate(), zero3.clone() );
  404. var m = new Matrix4().makeTranslation( 1, - 2, 1 );
  405. var t1 = new Vector3( 1, - 2, 1 );
  406. assert.ok( compareBox( a.clone().applyMatrix4( m ), a.clone().translate( t1 ) ), "Passed!" );
  407. assert.ok( compareBox( b.clone().applyMatrix4( m ), b.clone().translate( t1 ) ), "Passed!" );
  408. assert.ok( compareBox( c.clone().applyMatrix4( m ), c.clone().translate( t1 ) ), "Passed!" );
  409. assert.ok( compareBox( d.clone().applyMatrix4( m ), d.clone().translate( t1 ) ), "Passed!" );
  410. } );
  411. QUnit.test( "translate", ( assert ) => {
  412. var a = new Box3( zero3.clone(), zero3.clone() );
  413. var b = new Box3( zero3.clone(), one3.clone() );
  414. var c = new Box3( one3.clone().negate(), one3.clone() );
  415. var d = new Box3( one3.clone().negate(), zero3.clone() );
  416. assert.ok( a.clone().translate( one3 ).equals( new Box3( one3, one3 ) ), "Passed!" );
  417. assert.ok( a.clone().translate( one3 ).translate( one3.clone().negate() ).equals( a ), "Passed!" );
  418. assert.ok( d.clone().translate( one3 ).equals( b ), "Passed!" );
  419. assert.ok( b.clone().translate( one3.clone().negate() ).equals( d ), "Passed!" );
  420. } );
  421. QUnit.test( "equals", ( assert ) => {
  422. var a = new Box3();
  423. var b = new Box3();
  424. assert.ok( b.equals( a ), "Passed!" );
  425. assert.ok( a.equals( b ), "Passed!" );
  426. a = new Box3( one3, two3 );
  427. b = new Box3( one3, two3 );
  428. assert.ok( b.equals( a ), "Passed!" );
  429. assert.ok( a.equals( b ), "Passed!" );
  430. a = new Box3( one3, two3 );
  431. b = a.clone();
  432. assert.ok( b.equals( a ), "Passed!" );
  433. assert.ok( a.equals( b ), "Passed!" );
  434. a = new Box3( one3, two3 );
  435. b = new Box3( one3, one3 );
  436. assert.ok( ! b.equals( a ), "Passed!" );
  437. assert.ok( ! a.equals( b ), "Passed!" );
  438. a = new Box3();
  439. b = new Box3( one3, one3 );
  440. assert.ok( ! b.equals( a ), "Passed!" );
  441. assert.ok( ! a.equals( b ), "Passed!" );
  442. } );
  443. } );
  444. } );
粤ICP备19079148号