mirror of
https://github.com/overte-org/overte.git
synced 2025-04-08 07:12:40 +02:00
add test script
This commit is contained in:
parent
149750fe21
commit
9c81a89ac3
1 changed files with 131 additions and 0 deletions
131
scripts/developer/tests/performance/rayPickPerformance.js
Normal file
131
scripts/developer/tests/performance/rayPickPerformance.js
Normal file
|
@ -0,0 +1,131 @@
|
|||
//
|
||||
// rayPickingPerformance.js
|
||||
// examples
|
||||
//
|
||||
// Created by Brad Hefta-Gaub on 5/13/2017
|
||||
// Copyright 2017 High Fidelity, Inc.
|
||||
//
|
||||
// Distributed under the Apache License, Version 2.0.
|
||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||
//
|
||||
|
||||
|
||||
|
||||
var MIN_RANGE = -3;
|
||||
var MAX_RANGE = 3;
|
||||
var RANGE_DELTA = 0.5;
|
||||
var OUTER_LOOPS = 10;
|
||||
|
||||
// NOTE: These expected results depend completely on the model, and the range settings above
|
||||
var EXPECTED_TESTS = 1385 * OUTER_LOOPS;
|
||||
var EXPECTED_INTERSECTIONS = 1286 * OUTER_LOOPS;
|
||||
|
||||
|
||||
var center = Vec3.sum(MyAvatar.position, Vec3.multiply(3, Quat.getFront(Camera.getOrientation())));
|
||||
var model_url = "http://hifi-content.s3.amazonaws.com/caitlyn/production/Scansite/buddhaReduced.fbx";
|
||||
|
||||
var rayPickOverlays = Array();
|
||||
|
||||
var modelEntity = Entities.addEntity({
|
||||
type: "Model",
|
||||
modelURL: model_url,
|
||||
dimensions: {
|
||||
x: 0.671,
|
||||
y: 1.21,
|
||||
z: 0.938
|
||||
},
|
||||
position: center
|
||||
});
|
||||
|
||||
function rayCastTest() {
|
||||
var tests = 0;
|
||||
var intersections = 0;
|
||||
|
||||
var testStart = Date.now();
|
||||
for (var t = 0; t < OUTER_LOOPS; t++) {
|
||||
print("beginning loop:" + t);
|
||||
for (var x = MIN_RANGE; x < MAX_RANGE; x += RANGE_DELTA) {
|
||||
for (var y = MIN_RANGE; y < MAX_RANGE; y += RANGE_DELTA) {
|
||||
for (var z = MIN_RANGE; z < MAX_RANGE; z += RANGE_DELTA) {
|
||||
if ((x <= -2 || x >= 2) ||
|
||||
(y <= -2 || y >= 2) ||
|
||||
(z <= -2 || z >= 2)) {
|
||||
|
||||
tests++;
|
||||
|
||||
var origin = { x: center.x + x,
|
||||
y: center.y + y,
|
||||
z: center.z + z };
|
||||
var direction = Vec3.subtract(center, origin);
|
||||
|
||||
var pickRay = {
|
||||
origin: origin,
|
||||
direction: direction
|
||||
};
|
||||
|
||||
var pickResults = Entities.findRayIntersection(pickRay, true);
|
||||
|
||||
var color;
|
||||
var visible;
|
||||
|
||||
if (pickResults.intersects && pickResults.entityID == modelEntity) {
|
||||
intersections++;
|
||||
color = {
|
||||
red: 0,
|
||||
green: 255,
|
||||
blue: 0
|
||||
};
|
||||
visible = false;
|
||||
|
||||
} else {
|
||||
/*
|
||||
print("NO INTERSECTION?");
|
||||
Vec3.print("origin:", origin);
|
||||
Vec3.print("direction:", direction);
|
||||
*/
|
||||
|
||||
color = {
|
||||
red: 255,
|
||||
green: 0,
|
||||
blue: 0
|
||||
};
|
||||
visible = true;
|
||||
}
|
||||
|
||||
var overlayID = Overlays.addOverlay("line3d", {
|
||||
color: color,
|
||||
alpha: 1,
|
||||
visible: visible,
|
||||
lineWidth: 2,
|
||||
start: origin,
|
||||
end: Vec3.sum(origin,Vec3.multiply(5,direction))
|
||||
});
|
||||
|
||||
rayPickOverlays.push(overlayID);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
print("ending loop:" + t);
|
||||
}
|
||||
var testEnd = Date.now();
|
||||
var testElapsed = testEnd - testStart;
|
||||
|
||||
|
||||
print("EXPECTED tests:" + EXPECTED_TESTS + " intersections:" + EXPECTED_INTERSECTIONS);
|
||||
print("ACTUAL tests:" + tests + " intersections:" + intersections);
|
||||
print("ELAPSED TIME:" + testElapsed + " ms");
|
||||
|
||||
}
|
||||
|
||||
function cleanup() {
|
||||
Entities.deleteEntity(modelEntity);
|
||||
rayPickOverlays.forEach(function(item){
|
||||
Overlays.deleteOverlay(item);
|
||||
});
|
||||
}
|
||||
|
||||
Script.scriptEnding.connect(cleanup);
|
||||
|
||||
rayCastTest(); // run ray cast test immediately
|
Loading…
Reference in a new issue