mirror of
https://github.com/servo/servo.git
synced 2025-07-03 05:23:38 +01:00
Use the built-in laser pointer for magicleap
This commit is contained in:
parent
9b4b02275e
commit
4709a3061d
9 changed files with 15 additions and 62 deletions
|
@ -2,9 +2,9 @@
|
||||||
<mlproject:mlproject xmlns:mlproject="http://www.magicleap.com/uidesigner/mlproject" generated="true" srcGenVersion="1">
|
<mlproject:mlproject xmlns:mlproject="http://www.magicleap.com/uidesigner/mlproject" generated="true" srcGenVersion="1">
|
||||||
<designFile path="scenes/Servo2D.design"/>
|
<designFile path="scenes/Servo2D.design"/>
|
||||||
<pipelineDirectory path="pipeline"/>
|
<pipelineDirectory path="pipeline"/>
|
||||||
|
<preferences key="srcgen.directories.incgen" value="inc.gen"/>
|
||||||
<preferences key="srcgen.directories.src" value="src"/>
|
<preferences key="srcgen.directories.src" value="src"/>
|
||||||
|
<preferences key="srcgen.directories.srcgen" value="src.gen"/>
|
||||||
<preferences key="srcgen.directories.basedir" value="code"/>
|
<preferences key="srcgen.directories.basedir" value="code"/>
|
||||||
<preferences key="srcgen.directories.inc" value="inc"/>
|
<preferences key="srcgen.directories.inc" value="inc"/>
|
||||||
<preferences key="srcgen.directories.incgen" value="inc.gen"/>
|
|
||||||
<preferences key="srcgen.directories.srcgen" value="src.gen"/>
|
|
||||||
</mlproject:mlproject>
|
</mlproject:mlproject>
|
|
@ -24,7 +24,6 @@
|
||||||
#include <SpawnedSceneBase.h>
|
#include <SpawnedSceneBase.h>
|
||||||
#include <SpawnedSceneHandlers.h>
|
#include <SpawnedSceneHandlers.h>
|
||||||
|
|
||||||
#include <lumin/node/LineNode.h>
|
|
||||||
#include <lumin/node/QuadNode.h>
|
#include <lumin/node/QuadNode.h>
|
||||||
#include <lumin/ui/node/UiButton.h>
|
#include <lumin/ui/node/UiButton.h>
|
||||||
#include <lumin/ui/node/UiPanel.h>
|
#include <lumin/ui/node/UiPanel.h>
|
||||||
|
@ -40,7 +39,6 @@ namespace scenes {
|
||||||
extern const std::string backButton;
|
extern const std::string backButton;
|
||||||
extern const std::string fwdButton;
|
extern const std::string fwdButton;
|
||||||
extern const std::string urlBar;
|
extern const std::string urlBar;
|
||||||
extern const std::string laser;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SpawnedScene : public SpawnedSceneBase {
|
struct SpawnedScene : public SpawnedSceneBase {
|
||||||
|
@ -51,7 +49,6 @@ namespace scenes {
|
||||||
lumin::ui::UiButton* backButton;
|
lumin::ui::UiButton* backButton;
|
||||||
lumin::ui::UiButton* fwdButton;
|
lumin::ui::UiButton* fwdButton;
|
||||||
lumin::ui::UiTextEdit* urlBar;
|
lumin::ui::UiTextEdit* urlBar;
|
||||||
lumin::LineNode* laser;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
SpawnedSceneBase* createSpawnedScene(const SceneDescriptor& sceneDescriptor, lumin::Node* root);
|
SpawnedSceneBase* createSpawnedScene(const SceneDescriptor& sceneDescriptor, lumin::Node* root);
|
||||||
|
|
|
@ -124,9 +124,10 @@ protected:
|
||||||
bool pointInsideViewport(glm::vec2 pt);
|
bool pointInsideViewport(glm::vec2 pt);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Redraw the laser. Returns the laser endpoint, in viewport coordinates.
|
* Returns the intersection of the laser and the viewport, in viewport coordinates.
|
||||||
|
* Returns (-1, -1) if the laser does not intersect the viewport.
|
||||||
*/
|
*/
|
||||||
glm::vec2 redrawLaser();
|
glm::vec2 laserPosition();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
lumin::Prism* prism_ = nullptr; // represents the bounded space where the App renders.
|
lumin::Prism* prism_ = nullptr; // represents the bounded space where the App renders.
|
||||||
|
|
|
@ -34,7 +34,6 @@ namespace scenes {
|
||||||
backButton = lumin::ui::UiButton::CastFrom(root->findChild(externalNodes::backButton));
|
backButton = lumin::ui::UiButton::CastFrom(root->findChild(externalNodes::backButton));
|
||||||
fwdButton = lumin::ui::UiButton::CastFrom(root->findChild(externalNodes::fwdButton));
|
fwdButton = lumin::ui::UiButton::CastFrom(root->findChild(externalNodes::fwdButton));
|
||||||
urlBar = lumin::ui::UiTextEdit::CastFrom(root->findChild(externalNodes::urlBar));
|
urlBar = lumin::ui::UiTextEdit::CastFrom(root->findChild(externalNodes::urlBar));
|
||||||
laser = lumin::LineNode::CastFrom(root->findChild(externalNodes::laser));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SpawnedScene::~SpawnedScene() {
|
SpawnedScene::~SpawnedScene() {
|
||||||
|
@ -73,10 +72,6 @@ namespace scenes {
|
||||||
urlBarHandlers(SpawnedScene& ss);
|
urlBarHandlers(SpawnedScene& ss);
|
||||||
};
|
};
|
||||||
urlBarHandlers urlBarHandlers_;
|
urlBarHandlers urlBarHandlers_;
|
||||||
struct laserHandlers {
|
|
||||||
laserHandlers(SpawnedScene& ss);
|
|
||||||
};
|
|
||||||
laserHandlers laserHandlers_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Handlers::contentPanelHandlers::contentPanelHandlers(SpawnedScene& ss)
|
Handlers::contentPanelHandlers::contentPanelHandlers(SpawnedScene& ss)
|
||||||
|
@ -94,9 +89,6 @@ namespace scenes {
|
||||||
Handlers::urlBarHandlers::urlBarHandlers(SpawnedScene& ss)
|
Handlers::urlBarHandlers::urlBarHandlers(SpawnedScene& ss)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
Handlers::laserHandlers::laserHandlers(SpawnedScene& ss)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
Handlers::Handlers(SpawnedScene& ss)
|
Handlers::Handlers(SpawnedScene& ss)
|
||||||
: SpawnedSceneHandlers(ss),
|
: SpawnedSceneHandlers(ss),
|
||||||
|
@ -104,8 +96,7 @@ namespace scenes {
|
||||||
contentHandlers_(ss),
|
contentHandlers_(ss),
|
||||||
backButtonHandlers_(ss),
|
backButtonHandlers_(ss),
|
||||||
fwdButtonHandlers_(ss),
|
fwdButtonHandlers_(ss),
|
||||||
urlBarHandlers_(ss),
|
urlBarHandlers_(ss)
|
||||||
laserHandlers_(ss)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,6 @@ namespace scenes {
|
||||||
extern const std::string backButton = "backButton";
|
extern const std::string backButton = "backButton";
|
||||||
extern const std::string fwdButton = "fwdButton";
|
extern const std::string fwdButton = "fwdButton";
|
||||||
extern const std::string urlBar = "urlBar";
|
extern const std::string urlBar = "urlBar";
|
||||||
extern const std::string laser = "laser";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const SceneDescriptor::ExternalNodeReferences externalNodesMap = {
|
const SceneDescriptor::ExternalNodeReferences externalNodesMap = {
|
||||||
|
@ -41,8 +40,7 @@ namespace scenes {
|
||||||
{"content", externalNodes::content},
|
{"content", externalNodes::content},
|
||||||
{"backButton", externalNodes::backButton},
|
{"backButton", externalNodes::backButton},
|
||||||
{"fwdButton", externalNodes::fwdButton},
|
{"fwdButton", externalNodes::fwdButton},
|
||||||
{"urlBar", externalNodes::urlBar},
|
{"urlBar", externalNodes::urlBar}
|
||||||
{"laser", externalNodes::laser}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const SceneDescriptor descriptor(
|
const SceneDescriptor descriptor(
|
||||||
|
|
|
@ -25,9 +25,9 @@ const int VIEWPORT_H = 500;
|
||||||
const float HIDPI = 1.0;
|
const float HIDPI = 1.0;
|
||||||
|
|
||||||
// The prism dimensions (in m).
|
// The prism dimensions (in m).
|
||||||
const float PRISM_W = 2.0;
|
const float PRISM_W = 0.75;
|
||||||
const float PRISM_H = 0.75;
|
const float PRISM_H = 0.75;
|
||||||
const float PRISM_D = 2.0;
|
const float PRISM_D = 0.05;
|
||||||
|
|
||||||
// The length of the laser pointer (in m).
|
// The length of the laser pointer (in m).
|
||||||
const float LASER_LENGTH = 10.0;
|
const float LASER_LENGTH = 10.0;
|
||||||
|
@ -226,14 +226,6 @@ int Servo2D::init() {
|
||||||
url_bar_->setKeyboardProperties(keyboard_properties);
|
url_bar_->setKeyboardProperties(keyboard_properties);
|
||||||
url_bar_->onFocusLostSub(std::bind(&Servo2D::urlBarEventListener, this));
|
url_bar_->onFocusLostSub(std::bind(&Servo2D::urlBarEventListener, this));
|
||||||
|
|
||||||
// Add the laser pointer
|
|
||||||
laser_ = lumin::LineNode::CastFrom(prism_->findNode(scenes::Servo2D::externalNodes::laser, root_node));
|
|
||||||
if (!laser_) {
|
|
||||||
ML_LOG(Error, "Servo2D Failed to get laser");
|
|
||||||
abort();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -264,7 +256,7 @@ void Servo2D::spawnInitialScenes() {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Servo2D::updateLoop(float fDelta) {
|
bool Servo2D::updateLoop(float fDelta) {
|
||||||
glm::vec2 pos = redrawLaser();
|
glm::vec2 pos = laserPosition();
|
||||||
move_servo(servo_, pos.x, pos.y);
|
move_servo(servo_, pos.x, pos.y);
|
||||||
heartbeat_servo(servo_);
|
heartbeat_servo(servo_);
|
||||||
return true;
|
return true;
|
||||||
|
@ -311,7 +303,7 @@ bool Servo2D::pose6DofEventListener(lumin::ControlPose6DofInputEventData* event)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
glm::vec2 Servo2D::redrawLaser() {
|
glm::vec2 Servo2D::laserPosition() {
|
||||||
// Return (-1, -1) if the laser doesn't intersect z=0
|
// Return (-1, -1) if the laser doesn't intersect z=0
|
||||||
glm::vec2 result = glm::vec2(-1.0, -1.0);
|
glm::vec2 result = glm::vec2(-1.0, -1.0);
|
||||||
|
|
||||||
|
@ -333,18 +325,9 @@ glm::vec2 Servo2D::redrawLaser() {
|
||||||
float ratio = 1.0 / (1.0 - (endpoint.z / position.z));
|
float ratio = 1.0 / (1.0 - (endpoint.z / position.z));
|
||||||
// The intersection point
|
// The intersection point
|
||||||
glm::vec3 intersection = ((1 - ratio) * position) + (ratio * endpoint);
|
glm::vec3 intersection = ((1 - ratio) * position) + (ratio * endpoint);
|
||||||
// Is the intersection inside the viewport?
|
|
||||||
result = viewportPosition(intersection);
|
result = viewportPosition(intersection);
|
||||||
if (pointInsideViewport(result)) {
|
|
||||||
color = glm::vec4(0.0, 1.0, 0.0, 1.0);
|
|
||||||
endpoint = intersection;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
laser_->clearPoints();
|
|
||||||
laser_->addPoints(position);
|
|
||||||
laser_->addPoints(endpoint);
|
|
||||||
laser_->setColor(color);
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -356,7 +339,7 @@ bool Servo2D::gestureEventListener(lumin::GestureInputEventData* event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only respond to trigger down if the laser is currently in the viewport
|
// Only respond to trigger down if the laser is currently in the viewport
|
||||||
glm::vec2 pos = redrawLaser();
|
glm::vec2 pos = laserPosition();
|
||||||
if ((typ == lumin::input::GestureType::TriggerDown) && !pointInsideViewport(pos)) {
|
if ((typ == lumin::input::GestureType::TriggerDown) && !pointInsideViewport(pos)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
"lap/types/file/png"
|
"lap/types/file/png"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"checkpoint-hash": "b1a5b4c3dfe7a6c0a3068dd837adfa07364f5016ddef9e6698090ba3544ccf921abba715182f372e25d65a9b6b13fdf11f12e436482cc3bace76f56876bd2251",
|
"checkpoint-hash": "729ed9ee48ecc992e1906080e20f43fdc3f3b2a4cd76cdfc2bc249bfca1d9403b967ed1a6805b0b8c0e46a0bfd3d71c0a6a00fd7da651beef65f7431b7b314b3",
|
||||||
"templates": [
|
"templates": [
|
||||||
"lap/template/passthru_material_from_kmat",
|
"lap/template/passthru_material_from_kmat",
|
||||||
"lap/template/passthru_model_from_fbx",
|
"lap/template/passthru_model_from_fbx",
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
<property id="sceneName" value="Servo2D"/>
|
<property id="sceneName" value="Servo2D"/>
|
||||||
<node name="contentPanel" nodeTypeId="lumin.ui.panel">
|
<node name="contentPanel" nodeTypeId="lumin.ui.panel">
|
||||||
<property id="cursorInitialPosition"/>
|
<property id="cursorInitialPosition"/>
|
||||||
|
<property id="cursorVisible" value="false"/>
|
||||||
<property id="edgeConstraint"/>
|
<property id="edgeConstraint"/>
|
||||||
<property id="external" value="true"/>
|
<property id="external" value="true"/>
|
||||||
<property id="gravityWellProperties">
|
<property id="gravityWellProperties">
|
||||||
|
@ -152,23 +153,6 @@
|
||||||
<property id="width" value="0.6"/>
|
<property id="width" value="0.6"/>
|
||||||
</node>
|
</node>
|
||||||
</node>
|
</node>
|
||||||
<node name="laser" nodeTypeId="lumin.line">
|
|
||||||
<property id="color" value="0 0 0 0"/>
|
|
||||||
<property id="external" value="true"/>
|
|
||||||
<property id="name" value="laser"/>
|
|
||||||
<property id="opaque" value="false"/>
|
|
||||||
<property id="points">
|
|
||||||
<property id="0"/>
|
|
||||||
<property id="1">
|
|
||||||
<property id="x" value="1.0"/>
|
|
||||||
<property id="y" value="1.0"/>
|
|
||||||
<property id="z" value="1.0"/>
|
|
||||||
</property>
|
|
||||||
</property>
|
|
||||||
<property id="position"/>
|
|
||||||
<property id="rotation"/>
|
|
||||||
<property id="scale"/>
|
|
||||||
</node>
|
|
||||||
<node name="bevel" nodeTypeId="lumin.quad">
|
<node name="bevel" nodeTypeId="lumin.quad">
|
||||||
<property id="color" value="0.4 0.302 0.702 1"/>
|
<property id="color" value="0.4 0.302 0.702 1"/>
|
||||||
<property id="name" value="bevel"/>
|
<property id="name" value="bevel"/>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<ObjectModel name="Servo2D" version="1">
|
<ObjectModel name="Servo2D" version="1">
|
||||||
<TransformNode/>
|
<TransformNode/>
|
||||||
<UiPanel bottomEdgeConstraint="0.000000" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" leftEdgeConstraint="0.000000" name="contentPanel" pos="0,0.06,0" rightEdgeConstraint="0.000000" shape="[size:[0.5,0.44], roundness: 0, offset:[0,0,0]]" topEdgeConstraint="0.000000">
|
<UiPanel bottomEdgeConstraint="0.000000" cursorVisible="false" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" leftEdgeConstraint="0.000000" name="contentPanel" pos="0,0.06,0" rightEdgeConstraint="0.000000" shape="[size:[0.5,0.44], roundness: 0, offset:[0,0,0]]" topEdgeConstraint="0.000000">
|
||||||
<QuadNode castShadow="false" name="content" pos="-0.25,-0.22,-0" receiveShadow="false" shader="MAX" size="0.500000, 0.500000"/>
|
<QuadNode castShadow="false" name="content" pos="-0.25,-0.22,-0" receiveShadow="false" shader="MAX" size="0.500000, 0.500000"/>
|
||||||
</UiPanel>
|
</UiPanel>
|
||||||
<UiLinearLayout alignment="Top, Center" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" itemAlignment="Center, Left" itemPadding="0.000000, 0.010000, 0.000000, 0.010000" name="uiLinearLayout1" orientation="Horizontal" pos="0,-0.2,0" size="0.500000, 0.050000">
|
<UiLinearLayout alignment="Top, Center" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" itemAlignment="Center, Left" itemPadding="0.000000, 0.010000, 0.000000, 0.010000" name="uiLinearLayout1" orientation="Horizontal" pos="0,-0.2,0" size="0.500000, 0.050000">
|
||||||
|
@ -14,6 +14,5 @@
|
||||||
<UiTextEdit alignment="Center, Left" font="DefaultRes_Font_LominoUI_Rg" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" name="urlBar" scrollSpeed="0.500000" size="0.600000, 0.050000" textSize="0.050000"/>
|
<UiTextEdit alignment="Center, Left" font="DefaultRes_Font_LominoUI_Rg" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" name="urlBar" scrollSpeed="0.500000" size="0.600000, 0.050000" textSize="0.050000"/>
|
||||||
</Content>
|
</Content>
|
||||||
</UiLinearLayout>
|
</UiLinearLayout>
|
||||||
<LineNode castShadow="false" color="0,0,0,0" name="laser" opaque="false" points="0.000000, 0.000000, 0.000000, 1.000000, 1.000000, 1.000000" receiveShadow="false" shader="Line"/>
|
|
||||||
<QuadNode castShadow="false" color="0.1572062,0.09219654,0.4817875,1" name="bevel" pos="-0.26,-0.17,-0.01" receiveShadow="false" shader="MAX" size="0.520000, 0.520000"/>
|
<QuadNode castShadow="false" color="0.1572062,0.09219654,0.4817875,1" name="bevel" pos="-0.26,-0.17,-0.01" receiveShadow="false" shader="MAX" size="0.520000, 0.520000"/>
|
||||||
</ObjectModel>
|
</ObjectModel>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue