Browse Source

Add Triangle.closestPointToPoint benchmark

Marshall Quander 7 years ago
parent
commit
5d38e61ad4
2 changed files with 103 additions and 41 deletions
  1. 42 41
      test/benchmark/benchmarks.html
  2. 61 0
      test/benchmark/core/TriangleClosestPoint.js

+ 42 - 41
test/benchmark/benchmarks.html

@@ -1,50 +1,51 @@
 <!DOCTYPE html>
 <html>
-<head>
-  <meta charset="utf-8">
-  <title>ThreeJS Benchmark Tests - Using Files in /src</title>
-  <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:700" rel="stylesheet" type="text/css">
-  <link href="normalize.css" rel="stylesheet" type="text/css">
-  <link href="style.css" rel="stylesheet" type="text/css">
-  <script src="../../build/three.min.js"></script>
-  <script src="vendor/lodash.min.js"></script>
-  <script src="vendor/benchmark-2.1.0.min.js"></script>
-  <script src="benchmark.js"></script>
+  <head>
+    <meta charset="utf-8">
+    <title>ThreeJS Benchmark Tests - Using Files in /src</title>
+    <link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:700" rel="stylesheet" type="text/css">
+    <link href="normalize.css" rel="stylesheet" type="text/css">
+    <link href="style.css" rel="stylesheet" type="text/css">
+    <script src="../../build/three.min.js"></script>
+    <script src="vendor/lodash.min.js"></script>
+    <script src="vendor/benchmark-2.1.0.min.js"></script>
+    <script src="benchmark.js"></script>
 
-  <script src="core/Vector3Components.js"></script>
-  <script src="core/Vector3Storage.js"></script>
-  <script src="core/Vector3Length.js"></script>
-  <script src="core/Float32Array.js"></script>
-  <script src="core/UpdateMatrixWorld.js"></script>
-</head>
-<body>
-  <header>
-    <h1>Three JS Benchmarks Suite</h1>
-  </header>
-  <section>
-  </section>
+    <script src="core/Vector3Components.js"></script>
+    <script src="core/Vector3Storage.js"></script>
+    <script src="core/Vector3Length.js"></script>
+    <script src="core/Float32Array.js"></script>
+    <script src="core/UpdateMatrixWorld.js"></script>
+    <script src="core/TriangleClosestPoint.js"></script>
+  </head>
+  <body>
+    <header>
+      <h1>Three JS Benchmarks Suite</h1>
+    </header>
+    <section>
+    </section>
 
-  <template id="suite">
-    <article>
-      <header>
-        <h2></h2>
-        <h3>Start</h3>
-      </header>
-      <div class="results">
-        <div class"head">
-          <p class="name">Name</p>
-          <p class="ops">Ops / Sec</p>
-          <p class="desv">±</p>
+    <template id="suite">
+      <article>
+        <header>
+          <h2></h2>
+          <h3>Start</h3>
+        </header>
+        <div class="results">
+          <div class"head">
+            <p class="name">Name</p>
+            <p class="ops">Ops / Sec</p>
+            <p class="desv">±</p>
+          </div>
         </div>
-      </div>
-    </article>
-  </template>
+      </article>
+    </template>
 
-  <template id="suite-test">
-    <div>
-      <p class="name"></p>
-      <p class="ops"></p>
-      <p class="desv"></p>
+    <template id="suite-test">
+      <div>
+        <p class="name"></p>
+        <p class="ops"></p>
+        <p class="desv"></p>
     </div>
   </template>
 

+ 61 - 0
test/benchmark/core/TriangleClosestPoint.js

@@ -0,0 +1,61 @@
+(function() {
+
+  THREE = Bench.THREE;
+
+  // these vertices and triangles are those of a unit icosahedron centered at the origin
+  var phi = 1.618;
+  var verts = [
+    [phi, 1, 0], [-phi, 1, 0], [phi, -1, 0], [-phi, -1, 0],
+    [1, 0, phi], [1, 0, -phi], [-1, 0, phi], [-1, 0, -phi],
+    [0, phi, 1], [0, -phi, 1], [0, phi, -1], [0, -phi, -1],
+  ];
+  var createVertex = function(c) {
+    return new THREE.Vector3(c[0], c[1], c[2]);
+  };
+  var createTriangle = function(i0, i1, i2) {
+    return new THREE.Triangle(createVertex(verts[i0]), createVertex(verts[i1]), createVertex(verts[i2]));
+  };
+  var triangles = [
+    createTriangle(0, 8, 4),
+    createTriangle(0, 5, 10),
+    createTriangle(2, 4, 9),
+    createTriangle(2, 11, 5),
+    createTriangle(1, 6, 8),
+    createTriangle(1, 10, 7),
+    createTriangle(3, 9, 6),
+    createTriangle(3, 7, 11),
+    createTriangle(0, 10, 8),
+    createTriangle(1, 8, 10),
+    createTriangle(2, 9, 11),
+    createTriangle(3, 9, 11),
+    createTriangle(4, 2, 0),
+    createTriangle(5, 0, 2),
+    createTriangle(6, 1, 3),
+    createTriangle(7, 3, 1),
+    createTriangle(8, 6, 4),
+    createTriangle(9, 4, 6),
+    createTriangle(10, 5, 7),
+    createTriangle(11, 7, 5),
+  ];
+  // test a variety of points all in and around the icosahedron
+  var testPoints = [];
+  for (var x = -2; x <= 2; x += 0.5) {
+    for (var y = -2; y <= 2; y += 0.5) {
+      for (var z = -2; z <= 2; z += 0.5) {
+        testPoints.push(new THREE.Vector3(x, y, z));
+      }
+    }
+  }
+
+  var s = Bench.newSuite("Clamping point into triangles");
+
+  s.add('9^3 points, 20 triangles', function() {
+    var target = new THREE.Vector3();
+    for (var tidx = 0; tidx < triangles.length; tidx++) {
+      triangle = triangles[tidx];
+      for (var pidx = 0; pidx < testPoints.length; pidx++) {
+        triangle.closestPointToPoint(testPoints[pidx], target);
+      }
+    }
+  });
+})();