123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- (function() {
- THREE = Bench.THREE;
- var position = new THREE.Vector3(1, 1, 1);
- var scale = new THREE.Vector3(2, 1, 0.5);
- var rotation = new THREE.Quaternion();
- rotation.setFromAxisAngle(new THREE.Vector3(0, 1, 0), Math.PI / 8);
- var createLocallyOffsetChild = function() {
- var child = new THREE.Object3D();
- child.position.copy(position);
- child.scale.copy(scale);
- child.rotation.copy(rotation);
- return child;
- };
- var generateSceneGraph = function(root, depth, breadth, initObject) {
- if (depth > 0) {
- for (var i = 0; i < breadth; i++) {
- var child = initObject();
- root.add(child);
- generateSceneGraph(child, depth - 1, breadth, initObject);
- }
- }
- return root;
- };
- var nodeCount = function(root) {
- return root.children.reduce(function(acc, x) { return acc + nodeCount(x); }, 1);
- };
- var rootA = generateSceneGraph(new THREE.Object3D(), 100, 1, createLocallyOffsetChild);
- var rootB = generateSceneGraph(new THREE.Object3D(), 3, 10, createLocallyOffsetChild);
- var rootC = generateSceneGraph(new THREE.Object3D(), 9, 3, createLocallyOffsetChild);
- var s = Bench.newSuite("Update world transforms");
- s.add('Update graph depth=100, breadth=1 (' + nodeCount(rootA) + ' nodes)', function() {
- rootA.updateMatrixWorld(true);
- });
- s.add('Update graph depth=3, breadth=10 (' + nodeCount(rootB) + ' nodes)', function() {
- rootB.updateMatrixWorld(true);
- });
- s.add('Update graph depth=9, breadth=3 (' + nodeCount(rootC) + ' nodes)', function() {
- rootC.updateMatrixWorld(true);
- });
- })();
|