mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-06 18:29:37 +02:00
603 lines
20 KiB
JavaScript
603 lines
20 KiB
JavaScript
var PARENT_ID = "{00000000-0000-0000-0000-000000000001}";
|
|
var LEFT_JOINT_INDEX = MyAvatar.getJointIndex("_CONTROLLER_LEFTHAND");
|
|
var RIGHT_JOINT_INDEX = MyAvatar.getJointIndex("_CONTROLLER_RIGHTHAND");
|
|
//var LEFT_JOINT_INDEX = MyAvatar.getJointIndex("LeftHand");
|
|
//var RIGHT_JOINT_INDEX = MyAvatar.getJointIndex("RightHand");
|
|
|
|
var zeroPosition = { x: 0, y: 0, z: 0 };
|
|
var zeroRotation = { x: 0, y: 0, z: 0, w: 1 };
|
|
|
|
var CONTROLLER_LENGTH_OFFSET = 0.0762;
|
|
|
|
var naturalPosition = {
|
|
x: 0,
|
|
y: -0.034076502197422087,
|
|
z: 0.06380049744620919
|
|
};
|
|
var naturalPositionL = {
|
|
x: 0,
|
|
y: 0.034076502197422087,
|
|
z: 0.06380049744620919
|
|
};
|
|
var naturalPositionR = {
|
|
x: 0.0,
|
|
y: 0.034076502197422087,
|
|
z: 0.06380049744620919
|
|
};
|
|
|
|
var leftBasePosition = {
|
|
x: CONTROLLER_LENGTH_OFFSET / 2,
|
|
y: CONTROLLER_LENGTH_OFFSET * 2,
|
|
z: CONTROLLER_LENGTH_OFFSET / 2
|
|
};
|
|
var rightBasePosition = {
|
|
x: -CONTROLLER_LENGTH_OFFSET / 2,
|
|
y: CONTROLLER_LENGTH_OFFSET * 2,
|
|
z: CONTROLLER_LENGTH_OFFSET / 2
|
|
};
|
|
|
|
var leftBasePositionVive = Vec3.sum(leftBasePosition, { x: 0.005, y: 0.03, z: 0 });
|
|
var rightBasePositionVive = Vec3.sum(rightBasePosition, { x: -0.005, y: 0.03, z: 0 });
|
|
|
|
Vec3.print("left offset: ", leftBasePosition);
|
|
|
|
var leftBaseRotation = Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(0, 0, 45),
|
|
Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(90, 0, 0),
|
|
Quat.fromPitchYawRollDegrees(0, 0, 90)
|
|
)
|
|
);
|
|
|
|
var rightBaseRotation = Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(0, 0, -45),
|
|
Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(90, 0, 0),
|
|
Quat.fromPitchYawRollDegrees(0, 0, -90)
|
|
)
|
|
);
|
|
|
|
|
|
var touchLeftBaseRotation = Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(0, 0, 0),
|
|
Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(0, 0, -45),
|
|
Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(180, 0, 0),
|
|
Quat.fromPitchYawRollDegrees(0, -90, 0)
|
|
)
|
|
)
|
|
);
|
|
|
|
var touchRightBaseRotation = Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(0, 0, 45),
|
|
Quat.multiply(
|
|
Quat.fromPitchYawRollDegrees(180, 0, 0),
|
|
Quat.fromPitchYawRollDegrees(0, 90, 0)
|
|
)
|
|
);
|
|
|
|
var TOUCH_CONTROLLER_CONFIGURATION = {
|
|
name: "Touch",
|
|
controllers: [
|
|
{
|
|
modelURL: "C:/Users/Ryan/Assets/controller/touch_l_full.fbx",
|
|
jointIndex: MyAvatar.getJointIndex("_CONTROLLER_LEFTHAND"),
|
|
rotation: touchLeftBaseRotation,
|
|
//position: Vec3.sum(leftBasePosition, { x: 0.032, y: 0.0, z: -0.02 }),
|
|
position: Vec3.sum(leftBasePosition, { x: 0.0, y: -0.016, z: -0.02 }),
|
|
//dimensions: naturalDimensions,
|
|
},
|
|
{
|
|
modelURL: "C:/Users/Ryan/Assets/controller/touch_r_full.fbx",
|
|
jointIndex: MyAvatar.getJointIndex("_CONTROLLER_RIGHTHAND"),
|
|
rotation: touchRightBaseRotation,
|
|
//position: rightBasePosition,
|
|
position: Vec3.sum(rightBasePosition, { x: 0.0, y: -0.016, z: -0.02 }),
|
|
//dimensions: naturalDimensions,
|
|
}
|
|
]
|
|
}
|
|
|
|
var TOUCH_2_CONTROLLER_CONFIGURATION = {
|
|
name: "Touch",
|
|
controllers: [
|
|
{
|
|
modelURL: "C:/Users/Ryan/Assets/controller/oculus_touch_l.fbx",
|
|
naturalPosition: {
|
|
x: 0.016486000269651413,
|
|
y: -0.035518500953912735,
|
|
z: -0.018527504056692123
|
|
},
|
|
jointIndex: MyAvatar.getJointIndex("_CONTROLLER_LEFTHAND"),
|
|
rotation: touchLeftBaseRotation,
|
|
position: leftBasePosition,
|
|
|
|
annotationTextRotation: Quat.fromPitchYawRollDegrees(20, -90, 0),
|
|
annotations: {
|
|
|
|
buttonX: {
|
|
position: {
|
|
x: -0.00931,
|
|
y: 0.00212,
|
|
z: -0.01259,
|
|
},
|
|
direction: "left",
|
|
color: { red: 100, green: 100, blue: 100 },
|
|
},
|
|
buttonY: {
|
|
position: {
|
|
x: -0.01617,
|
|
y: 0.00216,
|
|
z: 0.00177,
|
|
},
|
|
direction: "left",
|
|
color: { red: 100, green: 255, blue: 100 },
|
|
},
|
|
bumper: {
|
|
position: {
|
|
x: 0.00678,
|
|
y: -0.02740,
|
|
z: -0.02537,
|
|
},
|
|
direction: "left",
|
|
color: { red: 100, green: 100, blue: 255 },
|
|
},
|
|
trigger: {
|
|
position: {
|
|
x: -0.01275,
|
|
y: -0.01992,
|
|
z: 0.02314,
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
}
|
|
},
|
|
},
|
|
{
|
|
modelURL: "C:/Users/Ryan/Assets/controller/oculus_touch_r.fbx",
|
|
naturalPosition: {
|
|
x: -0.016486000269651413,
|
|
y: -0.035518500953912735,
|
|
z: -0.018527504056692123
|
|
},
|
|
jointIndex: MyAvatar.getJointIndex("_CONTROLLER_RIGHTHAND"),
|
|
rotation: touchRightBaseRotation,
|
|
position: rightBasePosition,
|
|
|
|
annotationTextRotation: Quat.fromPitchYawRollDegrees(20, 90, 0),
|
|
annotations: {
|
|
|
|
buttonA: {
|
|
position: {
|
|
x: 0.00931,
|
|
y: 0.00212,
|
|
z: -0.01259,
|
|
},
|
|
direction: "right",
|
|
color: { red: 100, green: 100, blue: 100 },
|
|
},
|
|
buttonB: {
|
|
position: {
|
|
x: 0.01617,
|
|
y: 0.00216,
|
|
z: 0.00177,
|
|
},
|
|
direction: "right",
|
|
color: { red: 100, green: 255, blue: 100 },
|
|
},
|
|
bumper: {
|
|
position: {
|
|
x: 0.00678,
|
|
y: -0.02740,
|
|
z: -0.02537,
|
|
},
|
|
direction: "right",
|
|
color: { red: 100, green: 100, blue: 255 },
|
|
},
|
|
trigger: {
|
|
position: {
|
|
x: 0.01275,
|
|
y: -0.01992,
|
|
z: 0.02314,
|
|
},
|
|
direction: "right",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
}
|
|
},
|
|
}
|
|
]
|
|
}
|
|
|
|
|
|
var viveNaturalDimensions = {
|
|
x: 0.1174320001155138,
|
|
y: 0.08361100335605443,
|
|
z: 0.21942697931081057
|
|
};
|
|
var viveNaturalPosition = {
|
|
x: 0,
|
|
y: -0.034076502197422087,
|
|
z: 0.06380049744620919
|
|
};
|
|
var viveModelURL = "https://hifi-public.s3.amazonaws.com/huffman/controllers/vive2.fbx";
|
|
|
|
var VIVE_CONTROLLER_CONFIGURATION = {
|
|
name: "Vive",
|
|
controllers: [
|
|
{
|
|
modelURL: viveModelURL,
|
|
jointIndex: MyAvatar.getJointIndex("_CONTROLLER_LEFTHAND"),
|
|
naturalPosition: viveNaturalPosition,
|
|
rotation: leftBaseRotation,
|
|
position: Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0, 0, 45), leftBasePosition),
|
|
|
|
dimensions: viveNaturalDimensions,
|
|
|
|
annotationTextRotation: Quat.fromPitchYawRollDegrees(20, -90, 0),
|
|
annotations: {
|
|
// red: {
|
|
// debug: true,
|
|
// position: {
|
|
// x: 0.1,
|
|
// y: 0.0,
|
|
// z: 0.0
|
|
// },
|
|
// direction: "right",
|
|
// color: { red: 255, green: 0, blue: 0 },
|
|
// },
|
|
// green: {
|
|
// debug: true,
|
|
// position: {
|
|
// x: 0.0,
|
|
// y: 0.1,
|
|
// z: 0.0
|
|
// },
|
|
// direction: "right",
|
|
// color: { red: 0, green: 255, blue: 0 },
|
|
// },
|
|
// blue: {
|
|
// debug: true,
|
|
// position: {
|
|
// x: 0.0,
|
|
// y: 0.0,
|
|
// z: 0.1
|
|
// },
|
|
// direction: "right",
|
|
// color: { red: 0, green: 0, blue: 255 },
|
|
// },
|
|
// white: {
|
|
// debug: true,
|
|
// position: {
|
|
// x: 0.0,
|
|
// y: 0.0,
|
|
// z: 0.0
|
|
// },
|
|
// direction: "right",
|
|
// color: { red: 255, green: 255, blue: 255 },
|
|
// },
|
|
|
|
center: {
|
|
position: zeroPosition,
|
|
direction: "center",
|
|
color: { red: 100, green: 255, blue: 255 },
|
|
},
|
|
trigger: {
|
|
position: {
|
|
x: 0,
|
|
y: -0.023978,
|
|
z: 0.04546
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
menu: {
|
|
position: {
|
|
x: 0,
|
|
y: 0.00770,
|
|
z: 0.01979
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
grip: {
|
|
position: {
|
|
x: 0.01980,
|
|
y: -0.01561,
|
|
z: 0.08721
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
pad: {
|
|
position: {
|
|
x: 0,
|
|
y: 0.00378,
|
|
z: 0.04920
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
steam: {
|
|
position: {
|
|
x: 0,
|
|
y: 0.00303,
|
|
z: 0.08838
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
},
|
|
},
|
|
{
|
|
modelURL: viveModelURL,
|
|
jointIndex: MyAvatar.getJointIndex("_CONTROLLER_RIGHTHAND"),
|
|
|
|
rotation: rightBaseRotation,
|
|
position: Vec3.multiplyQbyV(Quat.fromPitchYawRollDegrees(0, 0, -45), rightBasePosition),
|
|
|
|
dimensions: viveNaturalDimensions,
|
|
|
|
naturalPosition: {
|
|
x: 0,
|
|
y: -0.034076502197422087,
|
|
z: 0.06380049744620919
|
|
},
|
|
|
|
annotationTextRotation: Quat.fromPitchYawRollDegrees(20, -90, 0),
|
|
annotations: {
|
|
|
|
trigger: {
|
|
position: {
|
|
x: 0,
|
|
y: -0.023978,
|
|
z: 0.04546
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
menu: {
|
|
position: {
|
|
x: 0,
|
|
y: 0.00770,
|
|
z: 0.01979
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
grip: {
|
|
position: {
|
|
x: 0.01980,
|
|
y: -0.01561,
|
|
z: 0.08721
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
pad: {
|
|
position: {
|
|
x: 0,
|
|
y: 0.00378,
|
|
z: 0.04920
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
steam: {
|
|
position: {
|
|
x: 0,
|
|
y: 0.00303,
|
|
z: 0.08838
|
|
},
|
|
direction: "left",
|
|
color: { red: 255, green: 100, blue: 100 },
|
|
},
|
|
}
|
|
}
|
|
]
|
|
}
|
|
|
|
var DEBUG = true;
|
|
|
|
function setupController(config) {
|
|
var controllerDisplay = {
|
|
overlays: [],
|
|
annotations: {
|
|
},
|
|
mappingName: ""
|
|
};
|
|
for (var i = 0; i < config.controllers.length; ++i) {
|
|
var controller = config.controllers[i];
|
|
var position = controller.position;
|
|
if (controller.naturalPosition) {
|
|
position = Vec3.sum(Vec3.multiplyQbyV(
|
|
controller.rotation, controller.naturalPosition), position);
|
|
}
|
|
var overlayID = Overlays.addOverlay("model", {
|
|
url: controller.modelURL,
|
|
dimensions: controller.dimensions,
|
|
localRotation: controller.rotation,
|
|
localPosition: position,
|
|
parentID: PARENT_ID,
|
|
parentJointIndex: controller.jointIndex,
|
|
ignoreRayIntersection: true,
|
|
});
|
|
|
|
controllerDisplay.overlays.push(overlayID);
|
|
|
|
if (controller.annotations) {
|
|
for (var key in controller.annotations) {
|
|
var annotation = controller.annotations[key];
|
|
var annotationPosition = Vec3.sum(controller.position, Vec3.multiplyQbyV(controller.rotation, annotation.position));
|
|
if (DEBUG) {
|
|
overlayID = Overlays.addOverlay("sphere", {
|
|
localPosition: annotationPosition,
|
|
//localPosition: Vec3.sum(controller.position, annotation.position),
|
|
//localPosition: Vec3.sum(position, annotation.position),
|
|
color: annotation.color || { red: 255, green: 100, blue: 100 },
|
|
dimensions: {
|
|
x: 0.01,
|
|
y: 0.01,
|
|
z: 0.01
|
|
},
|
|
parentID: PARENT_ID,
|
|
parentJointIndex: controller.jointIndex,
|
|
});
|
|
controllerDisplay.overlays.push(overlayID);
|
|
|
|
controllerDisplay.annotations[key] = {
|
|
overlay: overlayID,
|
|
};
|
|
}
|
|
|
|
var sign = annotation.direction == "right" ? 1 : -1;
|
|
var textOffset = annotation.direction == "right" ? 0.04 : -0.01;
|
|
var textOverlayID = Overlays.addOverlay("text3d", {
|
|
text: key,
|
|
localPosition: Vec3.sum(annotationPosition, Vec3.multiplyQbyV(controller.rotation, { x: textOffset, y: 0, z: 0.0 })),
|
|
localRotation: controller.annotationTextRotation,
|
|
lineHeight: 0.01,
|
|
leftMargin: 0,
|
|
rightMargin: 0,
|
|
topMargin: 0,
|
|
bottomMargin: 0,
|
|
backgroundAlpha: 0,
|
|
dimensions: { x: 0.003, y: 0.003, z: 0.003 },
|
|
//localPosition: Vec3.sum(controller.position, annotation.position),
|
|
//localPosition: Vec3.sum(position, annotation.position),
|
|
color: annotation.textColor || { red: 255, green: 255, blue: 255 },
|
|
parentID: PARENT_ID,
|
|
parentJointIndex: controller.jointIndex,
|
|
});
|
|
controllerDisplay.overlays.push(textOverlayID);
|
|
|
|
var offset = { x: 0, y: 0, z: annotation.direction == "right" ? -0.1 : 0.1 };
|
|
var lineOverlayID = Overlays.addOverlay("line3d", {
|
|
visible: false,
|
|
localPosition: annotationPosition,
|
|
localStart: { x: 0, y: 0, z: 0 },
|
|
localEnd: offset,
|
|
//localPosition: Vec3.sum(controller.position, annotation.position),
|
|
//localPosition: Vec3.sum(position, annotation.position),
|
|
color: annotation.color || { red: 255, green: 100, blue: 100 },
|
|
parentID: PARENT_ID,
|
|
parentJointIndex: controller.jointIndex,
|
|
});
|
|
controllerDisplay.overlays.push(lineOverlayID);
|
|
}
|
|
}
|
|
}
|
|
return controllerDisplay;
|
|
}
|
|
|
|
ControllerDisplay = function() {
|
|
};
|
|
|
|
function deleteControllerDisplay(controllerDisplay) {
|
|
for (var i = 0; i < controllerDisplay.overlays.length; ++i) {
|
|
Overlays.deleteOverlay(controllerDisplay.overlays[i]);
|
|
}
|
|
Controller.disableMapping(controllerDisplay.mappingName);
|
|
}
|
|
|
|
// var triggerAnnotationOverlayID = Overlays.addOverlay("text3d", {
|
|
// text: "Trigger",
|
|
// lineHeight: 0.025,
|
|
// backgroundAlpha: 0.0,
|
|
// dimensions: {
|
|
// x: 0.2,
|
|
// y: 0.2,
|
|
// },
|
|
// localPosition: Vec3.sum(leftBasePosition, { x: -0.09, y: -0.025, z: 0.03 }),
|
|
// localRotation: Quat.multiply(Quat.fromPitchYawRollDegrees(180, 0, 90), leftBaseRotation),
|
|
// parentID: MyAvatar.sessionUUID,
|
|
// parentJointIndex: MyAvatar.getJointIndex("LeftHand")
|
|
// });
|
|
|
|
// var leftOverlayID = Overlays.addOverlay("model", {
|
|
// url: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vr_controller_vive_1_5.obj",
|
|
// dimensions: naturalDimensions,
|
|
// localRotation: leftBaseRotation,
|
|
// localPosition: leftBasePosition,
|
|
// parentID: PARENT_ID,
|
|
// parentJointIndex: LEFT_JOINT_INDEX
|
|
// });
|
|
//
|
|
// var leftTriggerOverlayID = Overlays.addOverlay("model", {
|
|
// url: "C:/Users/Ryan/Assets/controller/touch_l_trigger.fbx",
|
|
// visible: false,
|
|
// localRotation: leftBaseRotation,
|
|
// localPosition: Vec3.sum(leftBasePosition, { x: -0.05, y: -0.025, z: 0.02 }),
|
|
// parentID: PARENT_ID,
|
|
// parentJointIndex: LEFT_JOINT_INDEX
|
|
// });
|
|
|
|
// var rightOverlayID = Overlays.addOverlay("model", {
|
|
// url: "https://hifi-public.s3.amazonaws.com/huffman/controllers/vr_controller_vive_1_5.obj",
|
|
// dimensions: naturalDimensions,
|
|
// localRotation: rightBaseRotation,
|
|
// localPosition: rightBasePosition,
|
|
// parentID: PARENT_ID,
|
|
// parentJointIndex: RIGHT_JOINT_INDEX
|
|
// });
|
|
//
|
|
// var rightTriggerOverlayID = Overlays.addOverlay("model", {
|
|
// url: "C:/Users/Ryan/Assets/controller/touch_r_trigger.fbx",
|
|
// visible: false,
|
|
// localRotation: rightBaseRotation,
|
|
// localPosition: Vec3.sum(rightBasePosition, { x: 0.05, y: -0.025, z: 0.02 }),
|
|
// parentID: PARENT_ID,
|
|
// parentJointIndex: RIGHT_JOINT_INDEX
|
|
// });
|
|
//
|
|
var overlays = [
|
|
// leftOverlayID,
|
|
// leftTriggerOverlayID,
|
|
// triggerAnnotationOverlayID,
|
|
|
|
// rightOverlayID,
|
|
// rightTriggerOverlayID,
|
|
];
|
|
//
|
|
// Script.setInterval(function() {
|
|
// // var pose = MyAvatar.getLeftHandControllerPoseInWorldFrame();
|
|
// // Overlays.editOverlay(leftOverlayID, {
|
|
// // position: pose.translation,
|
|
// // rotation: pose.rotation
|
|
// // });
|
|
// // pose = MyAvatar.getRightHandControllerPoseInWorldFrame();
|
|
// // Overlays.editOverlay(rightOverlayID, {
|
|
// // position: pose.translation,
|
|
// // rotation: pose.rotation
|
|
// // });
|
|
// }, 10);
|
|
|
|
|
|
var MAPPING_NAME = "com.highfidelity.handControllerGrab.disable";
|
|
var mapping = Controller.newMapping(MAPPING_NAME);
|
|
mapping.from([Controller.Standard.LT]).to(function(value) {
|
|
// print(value);
|
|
// Overlays.editOverlay(leftTriggerOverlayID, {
|
|
// localRotation: Quat.multiply(Quat.fromPitchYawRollDegrees(0, 0, value * -45), leftBaseRotation)
|
|
// });
|
|
});
|
|
mapping.from([Controller.Standard.RT]).to(function(value) {
|
|
// print(value);
|
|
// Overlays.editOverlay(rightTriggerOverlayID, {
|
|
// localRotation: Quat.multiply(Quat.fromPitchYawRollDegrees(0, 0, value * 45), rightBaseRotation)
|
|
// });
|
|
});
|
|
Controller.enableMapping(MAPPING_NAME);
|
|
|
|
//var c = setupController(TOUCH_CONTROLLER_CONFIGURATION);
|
|
//var c = setupController(TOUCH_2_CONTROLLER_CONFIGURATION);
|
|
var c = setupController(VIVE_CONTROLLER_CONFIGURATION);
|
|
//MyAvatar.shouldRenderLocally = false;
|
|
Script.scriptEnding.connect(function() {
|
|
deleteControllerDisplay(c);
|
|
MyAvatar.shouldRenderLocally = true;
|
|
for (var i = 0; i < overlays.length; ++i) {
|
|
Overlays.deleteOverlay(overlays[i]);
|
|
}
|
|
Controller.disableMapping(MAPPING_NAME);
|
|
});
|