mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 12:49:34 +02:00
mvp progress
This commit is contained in:
parent
52b54dbf0c
commit
33142d6a7f
3 changed files with 825 additions and 0 deletions
|
@ -0,0 +1,167 @@
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Photo Booth</title>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||||
|
<link rel="stylesheet" type="text/css" href="../../../../../system/html/css/edit-style.css">
|
||||||
|
<script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var EventBridge;
|
||||||
|
var openEventBridge = function (callback) {
|
||||||
|
var WebChannel = new QWebChannel(qt.webChannelTransport, function (channel) {
|
||||||
|
EventBridge = WebChannel.objects.eventBridgeWrapper.eventBridge;
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var emit = function (eventType, data) {
|
||||||
|
data = data || {};
|
||||||
|
data.type = eventType;
|
||||||
|
EventBridge.emitWebEvent(JSON.stringify(data));
|
||||||
|
};
|
||||||
|
|
||||||
|
function loaded () {
|
||||||
|
openEventBridge(function () {
|
||||||
|
emit("onLoad", {value: "faye"});
|
||||||
|
|
||||||
|
var elModelURL = document.getElementById("model-url");
|
||||||
|
var elReloadModelButton = document.getElementById("reload-model-button");
|
||||||
|
var elCamera = document.getElementById("property-camera");
|
||||||
|
//var elLightingPreset = document.getElementById("property-lighting-preset");
|
||||||
|
var elPictureButton = document.getElementById("picture-button");
|
||||||
|
|
||||||
|
elReloadModelButton.addEventListener('click', function() {
|
||||||
|
emit("onClickReloadModelButton", {value: elModelURL.value});
|
||||||
|
});
|
||||||
|
elCamera.addEventListener('change', function() {
|
||||||
|
emit("onSelectCamera", {value: this.value});
|
||||||
|
});
|
||||||
|
// elLightingPreset.addEventListener('change', function() {
|
||||||
|
// emit("onSelectLightingPreset", {value: "faye"});
|
||||||
|
// });
|
||||||
|
elPictureButton.addEventListener('click', function() {
|
||||||
|
emit("onClickPictureButton", {value: "faye"});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// Drop downs
|
||||||
|
function setDropdownText(dropdown) {
|
||||||
|
var lis = dropdown.parentNode.getElementsByTagName("li");
|
||||||
|
var text = "";
|
||||||
|
for (var i = 0; i < lis.length; i++) {
|
||||||
|
if (lis[i].getAttribute("value") === dropdown.value) {
|
||||||
|
text = lis[i].textContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dropdown.firstChild.textContent = text;
|
||||||
|
}
|
||||||
|
function toggleDropdown(event) {
|
||||||
|
var element = event.target;
|
||||||
|
if (element.nodeName !== "DT") {
|
||||||
|
element = element.parentNode;
|
||||||
|
}
|
||||||
|
element = element.parentNode;
|
||||||
|
var isDropped = element.getAttribute("dropped");
|
||||||
|
element.setAttribute("dropped", isDropped !== "true" ? "true" : "false");
|
||||||
|
}
|
||||||
|
function setDropdownValue(event) {
|
||||||
|
var dt = event.target.parentNode.parentNode.previousSibling;
|
||||||
|
dt.value = event.target.getAttribute("value");
|
||||||
|
dt.firstChild.textContent = event.target.textContent;
|
||||||
|
|
||||||
|
dt.parentNode.setAttribute("dropped", "false");
|
||||||
|
|
||||||
|
var evt = document.createEvent("HTMLEvents");
|
||||||
|
evt.initEvent("change", true, true);
|
||||||
|
dt.dispatchEvent(evt);
|
||||||
|
}
|
||||||
|
|
||||||
|
var elDropdowns = document.getElementsByTagName("select");
|
||||||
|
for (var i = 0; i < elDropdowns.length; i++) {
|
||||||
|
var options = elDropdowns[i].getElementsByTagName("option");
|
||||||
|
var selectedOption = 0;
|
||||||
|
for (var j = 0; j < options.length; j++) {
|
||||||
|
if (options[j].getAttribute("selected") === "selected") {
|
||||||
|
selectedOption = j;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var div = elDropdowns[i].parentNode;
|
||||||
|
|
||||||
|
var dl = document.createElement("dl");
|
||||||
|
div.appendChild(dl);
|
||||||
|
|
||||||
|
var dt = document.createElement("dt");
|
||||||
|
dt.name = elDropdowns[i].name;
|
||||||
|
dt.id = elDropdowns[i].id;
|
||||||
|
dt.addEventListener("click", toggleDropdown, true);
|
||||||
|
dl.appendChild(dt);
|
||||||
|
|
||||||
|
var span = document.createElement("span");
|
||||||
|
span.setAttribute("value", options[selectedOption].value);
|
||||||
|
span.textContent = options[selectedOption].firstChild.textContent;
|
||||||
|
dt.appendChild(span);
|
||||||
|
|
||||||
|
var span = document.createElement("span");
|
||||||
|
span.textContent = "5"; // caratDn
|
||||||
|
dt.appendChild(span);
|
||||||
|
|
||||||
|
var dd = document.createElement("dd");
|
||||||
|
dl.appendChild(dd);
|
||||||
|
|
||||||
|
var ul = document.createElement("ul");
|
||||||
|
dd.appendChild(ul);
|
||||||
|
|
||||||
|
for (var j = 0; j < options.length; j++) {
|
||||||
|
var li = document.createElement("li");
|
||||||
|
li.setAttribute("value", options[j].value);
|
||||||
|
li.textContent = options[j].firstChild.textContent;
|
||||||
|
li.addEventListener("click", setDropdownValue);
|
||||||
|
ul.appendChild(li);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
elDropdowns = document.getElementsByTagName("select");
|
||||||
|
while (elDropdowns.length > 0) {
|
||||||
|
var el = elDropdowns[0];
|
||||||
|
el.parentNode.removeChild(el);
|
||||||
|
elDropdowns = document.getElementsByTagName("select");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body onload="loaded()">
|
||||||
|
<div id="properties-list">
|
||||||
|
<div class="property url refresh">
|
||||||
|
<label>Model URL</label>
|
||||||
|
<input type="text" id="model-url"></input>
|
||||||
|
<input type="button" id="reload-model-button" class="glyph" value="F">
|
||||||
|
</div>
|
||||||
|
<!--
|
||||||
|
<div class="property dropdown">
|
||||||
|
<label>Lighting Preset</label>
|
||||||
|
<select id="property-lighting-preset">
|
||||||
|
<option>Default Lighting</option>
|
||||||
|
<option>Sam's Cool Light</option>
|
||||||
|
<option>Alan's Light Magic</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
<div class="property dropdown">
|
||||||
|
<label>Camera</label>
|
||||||
|
<select id="property-camera">
|
||||||
|
<option>First Person Camera</option>
|
||||||
|
<option>Main Camera</option>
|
||||||
|
<option>Left Camera</option>
|
||||||
|
<option>Right Camera</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="property">
|
||||||
|
<input id="picture-button" type="button" class="blue" value="Take Picture">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
176
scripts/developer/utilities/render/photobooth/photobooth.js
Normal file
176
scripts/developer/utilities/render/photobooth/photobooth.js
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
(function () {
|
||||||
|
var SNAPSHOT_DELAY = 500; // 500ms
|
||||||
|
var PHOTOBOOTH_WINDOW_HTML_URL = Script.resolvePath("./html/photobooth.html");
|
||||||
|
var PHOTOBOOTH_SETUP_JSON_URL = Script.resolvePath("./photoboothSetup.json");
|
||||||
|
var toolbar = Toolbars.getToolbar("com.highfidelity.interface.toolbar.system");
|
||||||
|
var MODEL_BOUNDING_BOX_DIMENSIONS = {x: 1.0174,y: 1.1925,z: 1.0165};
|
||||||
|
|
||||||
|
var PhotoBooth = {};
|
||||||
|
PhotoBooth.init = function () {
|
||||||
|
var success = Clipboard.importEntities(PHOTOBOOTH_SETUP_JSON_URL);
|
||||||
|
var frontFactor = 10;
|
||||||
|
var frontUnitVec = Vec3.normalize(Quat.getFront(MyAvatar.orientation));
|
||||||
|
var frontOffset = Vec3.multiply(frontUnitVec,frontFactor);
|
||||||
|
var rightFactor = 3;
|
||||||
|
var rightUnitVec = Vec3.normalize(Quat.getRight(MyAvatar.orientation));
|
||||||
|
var spawnLocation = Vec3.sum(Vec3.sum(MyAvatar.position,frontOffset),rightFactor);
|
||||||
|
if (success) {
|
||||||
|
this.pastedEntityIDs = Clipboard.pasteEntities(spawnLocation);
|
||||||
|
this.processPastedEntities();
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
PhotoBooth.processPastedEntities = function () {
|
||||||
|
var cameraResults = {};
|
||||||
|
var modelResult;
|
||||||
|
var modelPos;
|
||||||
|
this.pastedEntityIDs.forEach(function(id) {
|
||||||
|
var props = Entities.getEntityProperties(id);
|
||||||
|
var parts = props["name"].split(":");
|
||||||
|
if (parts[0] === "Photo Booth Camera") {
|
||||||
|
cameraResults[parts[1]] = id;
|
||||||
|
}
|
||||||
|
if (parts[0] === "Photo Booth Model") {
|
||||||
|
modelResult = id;
|
||||||
|
modelPos = props.position;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
print(JSON.stringify(cameraResults));
|
||||||
|
print(JSON.stringify(modelResult));
|
||||||
|
this.cameraEntities = cameraResults;
|
||||||
|
this.modelEntityID = modelResult;
|
||||||
|
this.centrePos = modelPos;
|
||||||
|
};
|
||||||
|
|
||||||
|
// replace the model in scene with new model
|
||||||
|
PhotoBooth.changeModel = function (newModelURL) {
|
||||||
|
// deletes old model
|
||||||
|
Entities.deleteEntity(this.modelEntityID);
|
||||||
|
// create new model at centre of the photobooth
|
||||||
|
var newProps = {
|
||||||
|
type: "Model",
|
||||||
|
modelURL: newModelURL,
|
||||||
|
position: this.centrePos
|
||||||
|
};
|
||||||
|
var newModelEntityID = Entities.addEntity(newProps);
|
||||||
|
|
||||||
|
// scale model dimensions to fit in bounding box
|
||||||
|
var scaleModel = function () {
|
||||||
|
newProps = Entities.getEntityProperties(newModelEntityID);
|
||||||
|
var myDimensions = newProps.dimensions;
|
||||||
|
print("myDimensions: " + JSON.stringify(myDimensions));
|
||||||
|
var k;
|
||||||
|
if (myDimensions.x > MODEL_BOUNDING_BOX_DIMENSIONS.x) {
|
||||||
|
k = MODEL_BOUNDING_BOX_DIMENSIONS.x / myDimensions.x;
|
||||||
|
myDimensions = Vec3.multiply(k, myDimensions);
|
||||||
|
}
|
||||||
|
if (myDimensions.y > MODEL_BOUNDING_BOX_DIMENSIONS.y) {
|
||||||
|
k = MODEL_BOUNDING_BOX_DIMENSIONS.y / myDimensions.y;
|
||||||
|
myDimensions = Vec3.multiply(k, myDimensions);
|
||||||
|
}
|
||||||
|
if (myDimensions.z > MODEL_BOUNDING_BOX_DIMENSIONS.z) {
|
||||||
|
k = MODEL_BOUNDING_BOX_DIMENSIONS.z / myDimensions.z;
|
||||||
|
myDimensions = Vec3.multiply(k, myDimensions);
|
||||||
|
}
|
||||||
|
// position the new model on the table
|
||||||
|
var y_offset = (MODEL_BOUNDING_BOX_DIMENSIONS.y - myDimensions.y) / 2;
|
||||||
|
var myPosition = Vec3.sum(newProps.position, {x:0, y:-y_offset, z:0});
|
||||||
|
Entities.editEntity(newModelEntityID,{position: myPosition, dimensions: myDimensions});
|
||||||
|
};
|
||||||
|
|
||||||
|
// add a delay before scaling to make sure the entity server have gotten the right model dimensions
|
||||||
|
Script.setTimeout(function () {
|
||||||
|
scaleModel();
|
||||||
|
}, 400);
|
||||||
|
|
||||||
|
this.modelEntityID = newModelEntityID;
|
||||||
|
};
|
||||||
|
|
||||||
|
PhotoBooth.destroy = function () {
|
||||||
|
this.pastedEntityIDs.forEach(function(id) {
|
||||||
|
Entities.deleteEntity(id);
|
||||||
|
});
|
||||||
|
Entities.deleteEntity(this.modelEntityID);
|
||||||
|
};
|
||||||
|
|
||||||
|
var main = function () {
|
||||||
|
PhotoBooth.init();
|
||||||
|
|
||||||
|
var photoboothWindowListener = {};
|
||||||
|
photoboothWindowListener.onLoad = function (event) {
|
||||||
|
print("loaded" + event.value);
|
||||||
|
if (!event.hasOwnProperty("value")){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
photoboothWindowListener.onSelectCamera = function (event) {
|
||||||
|
print("selected camera " + event.value);
|
||||||
|
if (!event.hasOwnProperty("value")){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (event.value === "First Person Camera") {
|
||||||
|
Camera.mode = "first person";
|
||||||
|
} else {
|
||||||
|
Camera.mode = "entity";
|
||||||
|
var cameraID = PhotoBooth.cameraEntities[event.value];
|
||||||
|
Camera.setCameraEntity(cameraID);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
photoboothWindowListener.onSelectLightingPreset = function (event) {
|
||||||
|
print("selected lighting preset" + event.value);
|
||||||
|
if (!event.hasOwnProperty("value")){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
photoboothWindowListener.onClickPictureButton = function (event) {
|
||||||
|
print("clicked picture button");
|
||||||
|
// hide HUD tool bar
|
||||||
|
toolbar.writeProperty("visible", false);
|
||||||
|
// hide Overlays (such as Running Scripts or other Dialog UI)
|
||||||
|
Menu.setIsOptionChecked("Overlays", false);
|
||||||
|
// hide mouse cursor
|
||||||
|
Reticle.visible = false;
|
||||||
|
// giving a delay here before snapshotting so that there is time to hide toolbar and other UIs
|
||||||
|
// void WindowScriptingInterface::takeSnapshot(bool notify, bool includeAnimated, float aspectRatio)
|
||||||
|
Script.setTimeout(function () {
|
||||||
|
Window.takeSnapshot(false, false, 1.91);
|
||||||
|
// show hidden items after snapshot is taken
|
||||||
|
toolbar.writeProperty("visible", true);
|
||||||
|
Menu.setIsOptionChecked("Overlays", true);
|
||||||
|
// unknown issue: somehow we don't need to reset cursor to visible in script and the mouse still returns after snapshot
|
||||||
|
// Reticle.visible = true;
|
||||||
|
}, SNAPSHOT_DELAY);
|
||||||
|
};
|
||||||
|
|
||||||
|
photoboothWindowListener.onClickReloadModelButton = function (event) {
|
||||||
|
print("clicked reload model button " + event.value);
|
||||||
|
PhotoBooth.changeModel(event.value);
|
||||||
|
};
|
||||||
|
|
||||||
|
var photoboothWindow = new OverlayWebWindow({
|
||||||
|
title: 'Photo Booth',
|
||||||
|
source: PHOTOBOOTH_WINDOW_HTML_URL,
|
||||||
|
width: 450,
|
||||||
|
height: 450,
|
||||||
|
visible: true
|
||||||
|
});
|
||||||
|
|
||||||
|
photoboothWindow.webEventReceived.connect(function (data) {
|
||||||
|
var event = JSON.parse(data);
|
||||||
|
if (photoboothWindowListener[event.type]) {
|
||||||
|
photoboothWindowListener[event.type](event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
main();
|
||||||
|
|
||||||
|
function cleanup() {
|
||||||
|
Camera.mode = "first person";
|
||||||
|
PhotoBooth.destroy();
|
||||||
|
}
|
||||||
|
Script.scriptEnding.connect(cleanup);
|
||||||
|
}());
|
|
@ -0,0 +1,482 @@
|
||||||
|
{
|
||||||
|
"Entities": [
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"collisionless": 1,
|
||||||
|
"color": {
|
||||||
|
"blue": 149,
|
||||||
|
"green": 245,
|
||||||
|
"red": 245
|
||||||
|
},
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.05000000074505806,
|
||||||
|
"y": 0.05000000074505806,
|
||||||
|
"z": 0.0099999997764825821
|
||||||
|
},
|
||||||
|
"id": "{4a7b6258-ccc5-472e-ba41-dfd224115bee}",
|
||||||
|
"ignoreForCollisions": 1,
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"name": "Photo Booth Camera:Right Camera",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"parentID": "{838ac5ff-5e06-4768-9389-9796577c5bc5}",
|
||||||
|
"position": {
|
||||||
|
"x": -0.022934332489967346,
|
||||||
|
"y": -0.25898283720016479,
|
||||||
|
"z": 0.17889007925987244
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 0.071414284408092499,
|
||||||
|
"x": 15.183169364929199,
|
||||||
|
"y": -192.90565490722656,
|
||||||
|
"z": 25.429607391357422
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": -7.62939453125e-05,
|
||||||
|
"x": -1.52587890625e-05,
|
||||||
|
"y": 1,
|
||||||
|
"z": -4.57763671875e-05
|
||||||
|
},
|
||||||
|
"shape": "Cube",
|
||||||
|
"type": "Box",
|
||||||
|
"visible": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"collisionless": 1,
|
||||||
|
"color": {
|
||||||
|
"blue": 149,
|
||||||
|
"green": 245,
|
||||||
|
"red": 245
|
||||||
|
},
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.05000000074505806,
|
||||||
|
"y": 0.05000000074505806,
|
||||||
|
"z": 0.0099999997764825821
|
||||||
|
},
|
||||||
|
"id": "{81ae005c-4738-4359-8860-98d00c8dd3a4}",
|
||||||
|
"ignoreForCollisions": 1,
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"name": "Photo Booth Camera:Main Camera",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"parentID": "{d5d16926-6f05-4411-931a-3ff8c897d728}",
|
||||||
|
"position": {
|
||||||
|
"x": -0.021826114505529404,
|
||||||
|
"y": -0.25215747952461243,
|
||||||
|
"z": 0.17469465732574463
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 0.071414284408092499,
|
||||||
|
"x": 16.758693695068359,
|
||||||
|
"y": -193.97714233398438,
|
||||||
|
"z": 24.816326141357422
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": -1.52587890625e-05,
|
||||||
|
"x": -1.52587890625e-05,
|
||||||
|
"y": 1,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shape": "Cube",
|
||||||
|
"type": "Box",
|
||||||
|
"visible": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"collisionless": 1,
|
||||||
|
"color": {
|
||||||
|
"blue": 149,
|
||||||
|
"green": 245,
|
||||||
|
"red": 245
|
||||||
|
},
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.05000000074505806,
|
||||||
|
"y": 0.05000000074505806,
|
||||||
|
"z": 0.0099999997764825821
|
||||||
|
},
|
||||||
|
"id": "{77817ac3-0862-46b6-8648-fdb8b855e4cb}",
|
||||||
|
"ignoreForCollisions": 1,
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"name": "Photo Booth Camera:Left Camera",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"parentID": "{2fc83747-6652-4fd1-bf21-c3d44ad610ea}",
|
||||||
|
"position": {
|
||||||
|
"x": -0.021829158067703247,
|
||||||
|
"y": -0.25214886665344238,
|
||||||
|
"z": 0.17469853162765503
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 0.071414284408092499,
|
||||||
|
"x": 18.187423706054688,
|
||||||
|
"y": -193.3980712890625,
|
||||||
|
"z": 25.408010482788086
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": -1.52587890625e-05,
|
||||||
|
"x": -7.62939453125e-05,
|
||||||
|
"y": 1,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shape": "Cube",
|
||||||
|
"type": "Box",
|
||||||
|
"visible": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"collisionless": 1,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.43360000848770142,
|
||||||
|
"y": 0.65679997205734253,
|
||||||
|
"z": 0.42160001397132874
|
||||||
|
},
|
||||||
|
"gravity": {
|
||||||
|
"x": 0,
|
||||||
|
"y": -9,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"id": "{d5d16926-6f05-4411-931a-3ff8c897d728}",
|
||||||
|
"ignoreForCollisions": 1,
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/caitlyn/production/lazybonesToybox/cameras/35mm%20camera.fbx?232222",
|
||||||
|
"name": "35 MM SLR by Lazybones",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 2.5208168029785156,
|
||||||
|
"y": 2.11322021484375,
|
||||||
|
"z": 1.1888446807861328
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 0.89282792806625366,
|
||||||
|
"x": 2.0744028091430664,
|
||||||
|
"y": 1.6668062210083008,
|
||||||
|
"z": 0.74243068695068359
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": 1,
|
||||||
|
"x": -1.52587890625e-05,
|
||||||
|
"y": -1.52587890625e-05,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"scriptTimestamp": 1479859505510,
|
||||||
|
"shapeType": "simple-hull",
|
||||||
|
"type": "Model",
|
||||||
|
"userData": "{\"grabbableKey\":{\"grabbable\":true},\"wearable\":{\"joints\":{\"LeftHand\":[{\"x\":-0.23937,\"y\":0.334177,\"z\":0.150116},{\"x\":-0.31183,\"y\":0.535888,\"z\":-0.37311,\"w\":-0.69021}],\"RightHand\":[{\"x\":0.11031082272529602,\"y\":0.19449540972709656,\"z\":0.0405043363571167},{\"x\":0.2807741165161133,\"y\":0.6332069635391235,\"z\":0.2997693121433258,\"w\":-0.6557632088661194}]}}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"collisionless": 1,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.43360000848770142,
|
||||||
|
"y": 0.65679997205734253,
|
||||||
|
"z": 0.42155000567436218
|
||||||
|
},
|
||||||
|
"gravity": {
|
||||||
|
"x": 0,
|
||||||
|
"y": -9,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"id": "{838ac5ff-5e06-4768-9389-9796577c5bc5}",
|
||||||
|
"ignoreForCollisions": 1,
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/caitlyn/production/lazybonesToybox/cameras/35mm%20camera.fbx?232222",
|
||||||
|
"name": "35 MM SLR by Lazybones",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 0.86136627197265625,
|
||||||
|
"y": 3.2271270751953125,
|
||||||
|
"z": 1.8821067810058594
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 0.89280432462692261,
|
||||||
|
"x": 0.41496410965919495,
|
||||||
|
"y": 2.7807250022888184,
|
||||||
|
"z": 1.4357045888900757
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": 0.91699087619781494,
|
||||||
|
"x": 0.11256575584411621,
|
||||||
|
"y": 0.37981235980987549,
|
||||||
|
"z": -0.046890974044799805
|
||||||
|
},
|
||||||
|
"scriptTimestamp": 1479859456707,
|
||||||
|
"shapeType": "simple-hull",
|
||||||
|
"type": "Model",
|
||||||
|
"userData": "{\"grabbableKey\":{\"grabbable\":true},\"wearable\":{\"joints\":{\"LeftHand\":[{\"x\":-0.23937,\"y\":0.334177,\"z\":0.150116},{\"x\":-0.31183,\"y\":0.535888,\"z\":-0.37311,\"w\":-0.69021}],\"RightHand\":[{\"x\":0.11031082272529602,\"y\":0.19449540972709656,\"z\":0.0405043363571167},{\"x\":0.2807741165161133,\"y\":0.6332069635391235,\"z\":0.2997693121433258,\"w\":-0.6557632088661194}]}}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"collisionless": 1,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.43360000848770142,
|
||||||
|
"y": 0.65679997205734253,
|
||||||
|
"z": 0.42155000567436218
|
||||||
|
},
|
||||||
|
"gravity": {
|
||||||
|
"x": 0,
|
||||||
|
"y": -9,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"id": "{2fc83747-6652-4fd1-bf21-c3d44ad610ea}",
|
||||||
|
"ignoreForCollisions": 1,
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/caitlyn/production/lazybonesToybox/cameras/35mm%20camera.fbx?232222",
|
||||||
|
"name": "35 MM SLR by Lazybones",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 4.0442371368408203,
|
||||||
|
"y": 2.7116241455078125,
|
||||||
|
"z": 1.869842529296875
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 0.89280432462692261,
|
||||||
|
"x": 3.5978350639343262,
|
||||||
|
"y": 2.2652220726013184,
|
||||||
|
"z": 1.4234403371810913
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": 0.92196536064147949,
|
||||||
|
"x": 0.056198954582214355,
|
||||||
|
"y": -0.38243687152862549,
|
||||||
|
"z": 0.023208975791931152
|
||||||
|
},
|
||||||
|
"scriptTimestamp": 1479859451129,
|
||||||
|
"shapeType": "simple-hull",
|
||||||
|
"type": "Model",
|
||||||
|
"userData": "{\"grabbableKey\":{\"grabbable\":true},\"wearable\":{\"joints\":{\"LeftHand\":[{\"x\":-0.23937,\"y\":0.334177,\"z\":0.150116},{\"x\":-0.31183,\"y\":0.535888,\"z\":-0.37311,\"w\":-0.69021}],\"RightHand\":[{\"x\":0.11031082272529602,\"y\":0.19449540972709656,\"z\":0.0405043363571167},{\"x\":0.2807741165161133,\"y\":0.6332069635391235,\"z\":0.2997693121433258,\"w\":-0.6557632088661194}]}}}"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 1.0173832178115845,
|
||||||
|
"y": 1.1924686431884766,
|
||||||
|
"z": 1.0164898633956909
|
||||||
|
},
|
||||||
|
"id": "{541efd7c-7e5f-40d5-b6ed-8e195afe9197}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/alan/dev/Test-Object-7-metal.fbx",
|
||||||
|
"name": "Photo Booth Model:Default",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 2.5627613067626953,
|
||||||
|
"y": 1.8016510009765625,
|
||||||
|
"z": 3.6444053649902344
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 1.8682348728179932,
|
||||||
|
"x": 1.6286438703536987,
|
||||||
|
"y": 0.86753356456756592,
|
||||||
|
"z": 2.7102880477905273
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": 1,
|
||||||
|
"x": -1.52587890625e-05,
|
||||||
|
"y": -1.52587890625e-05,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shapeType": "static-mesh",
|
||||||
|
"type": "Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"created": "2016-11-29T23:44:49Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 1.1263399124145508,
|
||||||
|
"y": 0.55930328369140625,
|
||||||
|
"z": 1.0736434459686279
|
||||||
|
},
|
||||||
|
"id": "{5a286dd0-d6d8-4ed9-a579-1c0587b63fbc}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "atp:/jimi/tutorialroom/table3.fbx",
|
||||||
|
"name": "Photo Booth Stool",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 2.5654888153076172,
|
||||||
|
"y": 0.9199371337890625,
|
||||||
|
"z": 3.7379035949707031
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 1.6535331010818481,
|
||||||
|
"x": 1.7387223243713379,
|
||||||
|
"y": 0.093170583248138428,
|
||||||
|
"z": 2.9111371040344238
|
||||||
|
},
|
||||||
|
"shapeType": "static-mesh",
|
||||||
|
"type": "Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 1.3296165466308594,
|
||||||
|
"y": 3.0967316627502441,
|
||||||
|
"z": 2.4247901439666748
|
||||||
|
},
|
||||||
|
"id": "{a0cd3304-e7e3-4522-8fbb-c4cf8d234eca}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/Examples%20Content/production/basketball/hoop.fbx",
|
||||||
|
"name": "Photo Booth Stand Right",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 2.207672119140625,
|
||||||
|
"z": 0.97442245483398438
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 4.1517748832702637,
|
||||||
|
"x": -2.0758874416351318,
|
||||||
|
"y": 0.13178467750549316,
|
||||||
|
"z": -1.1014649868011475
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": -0.37505149841308594,
|
||||||
|
"x": -1.52587890625e-05,
|
||||||
|
"y": 0.92700088024139404,
|
||||||
|
"z": 1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shapeType": "static-mesh",
|
||||||
|
"type": "Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 0.6701958179473877,
|
||||||
|
"y": 3.0894412994384766,
|
||||||
|
"z": 6.0362682342529297
|
||||||
|
},
|
||||||
|
"id": "{f3c937d3-4493-41a1-8928-0cae4c4ce19f}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://mpassets.highfidelity.com/af67a13f-7610-49b4-9723-b284fb8ff37a-v1/Dungeon-Wall-6X3.fbx",
|
||||||
|
"name": "Photo Booth Backdrop",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 2.4534530639648438,
|
||||||
|
"y": 2.0988006591796875,
|
||||||
|
"z": 5.0006065368652344
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 6.8139815330505371,
|
||||||
|
"x": -0.9535377025604248,
|
||||||
|
"y": -1.3081901073455811,
|
||||||
|
"z": 1.5936157703399658
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": -0.70128941535949707,
|
||||||
|
"x": 1.52587890625e-05,
|
||||||
|
"y": 0.71288621425628662,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shapeType": "box",
|
||||||
|
"type": "Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"color": {
|
||||||
|
"blue": 201,
|
||||||
|
"green": 252,
|
||||||
|
"red": 255
|
||||||
|
},
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 8.0457677841186523,
|
||||||
|
"y": 1.3176910877227783,
|
||||||
|
"z": 8.4534158706665039
|
||||||
|
},
|
||||||
|
"id": "{7e4f4bed-a47b-449f-acb2-cb0410847e84}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 2.4956779479980469,
|
||||||
|
"y": 0,
|
||||||
|
"z": 2.2972354888916016
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 11.744400024414062,
|
||||||
|
"x": -3.3765220642089844,
|
||||||
|
"y": -5.8722000122070312,
|
||||||
|
"z": -3.5749645233154297
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": 1,
|
||||||
|
"x": -1.52587890625e-05,
|
||||||
|
"y": -1.52587890625e-05,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shape": "Cube",
|
||||||
|
"type": "Box"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 1.3296165466308594,
|
||||||
|
"y": 1.5271610021591187,
|
||||||
|
"z": 2.4247901439666748
|
||||||
|
},
|
||||||
|
"id": "{891fb90c-ca13-46fb-b21e-0da6063ad07b}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/Examples%20Content/production/basketball/hoop.fbx",
|
||||||
|
"name": "Photo Booth Stand Middle",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 2.4825477600097656,
|
||||||
|
"y": 1.4576416015625,
|
||||||
|
"z": 0
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 3.1590676307678223,
|
||||||
|
"x": 0.90301394462585449,
|
||||||
|
"y": -0.12189221382141113,
|
||||||
|
"z": -1.5795338153839111
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": -1.52587890625e-05,
|
||||||
|
"x": -4.57763671875e-05,
|
||||||
|
"y": 1,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shapeType": "static-mesh",
|
||||||
|
"type": "Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"clientOnly": 0,
|
||||||
|
"created": "2016-11-29T23:20:47Z",
|
||||||
|
"dimensions": {
|
||||||
|
"x": 1.3296165466308594,
|
||||||
|
"y": 2.3939504623413086,
|
||||||
|
"z": 2.4247901439666748
|
||||||
|
},
|
||||||
|
"id": "{3773db2f-5bd8-4d23-a3cc-53ffcc7c30e9}",
|
||||||
|
"lastEditedBy": "{d74cd0af-624e-4d3d-a930-f6cb7e47667d}",
|
||||||
|
"modelURL": "http://hifi-content.s3.amazonaws.com/Examples%20Content/production/basketball/hoop.fbx",
|
||||||
|
"name": "Photo Booth Stand - Left",
|
||||||
|
"owningAvatarID": "{00000000-0000-0000-0000-000000000000}",
|
||||||
|
"position": {
|
||||||
|
"x": 4.8861484527587891,
|
||||||
|
"y": 1.8541412353515625,
|
||||||
|
"z": 0.99666976928710938
|
||||||
|
},
|
||||||
|
"queryAACube": {
|
||||||
|
"scale": 3.6576614379882812,
|
||||||
|
"x": 3.0573177337646484,
|
||||||
|
"y": 0.025310516357421875,
|
||||||
|
"z": -0.83216094970703125
|
||||||
|
},
|
||||||
|
"rotation": {
|
||||||
|
"w": 0.38268101215362549,
|
||||||
|
"x": -4.57763671875e-05,
|
||||||
|
"y": 0.92385745048522949,
|
||||||
|
"z": -1.52587890625e-05
|
||||||
|
},
|
||||||
|
"shapeType": "static-mesh",
|
||||||
|
"type": "Model"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"Version": 65
|
||||||
|
}
|
Loading…
Reference in a new issue