Compare commits

..

No commits in common. "22496fcc35642073886bbd85677d8478c5e401ff" and "8b7a3e0067ea82b452b2112e2fda41ecc9760dd9" have entirely different histories.

7 changed files with 24 additions and 48 deletions

View file

@ -1,18 +1,18 @@
VERSION=v0.2.2 VERSION=v0.2.1
# CC := g++
CXX := g++ CC := clang++
# CXX := clang++
CPPFLAGS := -g -Wall -std=c++17
LFLAGS := -lX11 -lXrandr -lXtst -lglfw -lGL LFLAGS := -lX11 -lXrandr -lXtst -lglfw -lGL
OVR := -Lopenvr -lopenvr_api LIBS := openvr/libopenvr_api.so
TARGET := ./sinpin_vr SRC := src/*.cpp
OUT := ./sinpin_vr
CPPFLAGS := -Wall -std=c++17 $(LFLAGS) $(LIBS) $(SRC) -o $(OUT)
build: build:
$(CXX) src/*.cpp $(CPPFLAGS) $(LFLAGS) -Wl,-rpath,'$$ORIGIN/openvr' $(OVR) -o $(TARGET) $(CC) -g $(CPPFLAGS)
release: build release: build
zip -r sinpin_vr-$(VERSION).zip sinpin_vr bindings openvr/libopenvr_api.so zip -r sinpin_vr-$(VERSION).zip sinpin_vr bindings openvr/libopenvr_api.so
run: build run: build
$(TARGET) $(OUT)

View file

@ -55,11 +55,6 @@
"name": "/actions/cursor/in/scroll", "name": "/actions/cursor/in/scroll",
"requirement": "suggested", "requirement": "suggested",
"type": "vector2" "type": "vector2"
},
{
"name": "/actions/cursor/out/scroll_haptic",
"requirement": "suggested",
"type": "vibration"
} }
], ],
"action_sets": [ "action_sets": [
@ -88,8 +83,7 @@
"/actions/cursor/in/mouse_left": "left mouse button", "/actions/cursor/in/mouse_left": "left mouse button",
"/actions/cursor/in/mouse_right": "right mouse button", "/actions/cursor/in/mouse_right": "right mouse button",
"/actions/cursor/in/mouse_middle": "middle mouse button", "/actions/cursor/in/mouse_middle": "middle mouse button",
"/actions/cursor/in/scroll": "scroll", "/actions/cursor/in/scroll": "scroll"
"/actions/cursor/out/scroll_haptic": "scrolling haptic feedback"
} }
] ]
} }

View file

@ -141,16 +141,6 @@
"app_key" : "system.generated.sinpin_vr", "app_key" : "system.generated.sinpin_vr",
"bindings" : { "bindings" : {
"/actions/cursor" : { "/actions/cursor" : {
"haptics" : [
{
"output" : "/actions/cursor/out/scroll_haptic",
"path" : "/user/hand/left/output/haptic"
},
{
"output" : "/actions/cursor/out/scroll_haptic",
"path" : "/user/hand/right/output/haptic"
}
],
"sources" : [ "sources" : [
{ {
"inputs" : { "inputs" : {

View file

@ -75,8 +75,6 @@ App::App()
assert(action_err == 0); assert(action_err == 0);
action_err = vr_input->GetActionHandle("/actions/cursor/in/scroll", &_input_handles.cursor.scroll); action_err = vr_input->GetActionHandle("/actions/cursor/in/scroll", &_input_handles.cursor.scroll);
assert(action_err == 0); assert(action_err == 0);
action_err = vr_input->GetActionHandle("/actions/cursor/out/scroll_haptic", &_input_handles.cursor.scroll_haptic);
assert(action_err == 0);
action_err = vr_input->GetActionSetHandle("/actions/main", &_input_handles.main_set); action_err = vr_input->GetActionSetHandle("/actions/main", &_input_handles.main_set);
assert(action_err == 0); assert(action_err == 0);
action_err = vr_input->GetActionSetHandle("/actions/edit", &_input_handles.edit_set); action_err = vr_input->GetActionSetHandle("/actions/edit", &_input_handles.edit_set);

View file

@ -32,7 +32,6 @@ struct InputHandles
vr::VRActionHandle_t mouse_right; vr::VRActionHandle_t mouse_right;
vr::VRActionHandle_t mouse_middle; vr::VRActionHandle_t mouse_middle;
vr::VRActionHandle_t scroll; vr::VRActionHandle_t scroll;
vr::VRActionHandle_t scroll_haptic;
} cursor; } cursor;
vr::VRActionSetHandle_t cursor_set; vr::VRActionSetHandle_t cursor_set;
struct struct

View file

@ -8,8 +8,6 @@ const float LASER_WIDTH = 0.004f;
const Color EDIT_COLOR{1, 0.6f, 1}; const Color EDIT_COLOR{1, 0.6f, 1};
const Color CURSOR_COLOR{0.3f, 1, 1}; const Color CURSOR_COLOR{0.3f, 1, 1};
const float SCROLL_SPEED = 48; const float SCROLL_SPEED = 48;
const float SCROLL_HAPTIC_STRENGTH = 0.15f;
const float SCROLL_HAPTIC_TIME = 0.1f;
const float MOUSE_DRAG_THRESHOLD = 48; const float MOUSE_DRAG_THRESHOLD = 48;
Controller::Controller(App *app, ControllerSide side) Controller::Controller(App *app, ControllerSide side)
@ -163,13 +161,11 @@ void Controller::Update(float dtime)
{ {
_app->SendMouseInput(4, true); _app->SendMouseInput(4, true);
_app->SendMouseInput(4, false); _app->SendMouseInput(4, false);
_app->vr_input->TriggerHapticVibrationAction(_app->_input_handles.cursor.scroll_haptic, 0, SCROLL_HAPTIC_TIME, 1 / SCROLL_HAPTIC_TIME, SCROLL_HAPTIC_STRENGTH, _input_handle);
} }
else if (scroll_state.y < 0) else if (scroll_state.y < 0)
{ {
_app->SendMouseInput(5, true); _app->SendMouseInput(5, true);
_app->SendMouseInput(5, false); _app->SendMouseInput(5, false);
_app->vr_input->TriggerHapticVibrationAction(_app->_input_handles.cursor.scroll_haptic, 0, SCROLL_HAPTIC_TIME, 1 / SCROLL_HAPTIC_TIME, SCROLL_HAPTIC_STRENGTH, _input_handle);
} }
} }
} }

View file

@ -159,29 +159,28 @@ void Overlay::SetTargetWorld()
SetTransformWorld(&abs_pose); SetTransformWorld(&abs_pose);
} }
Ray Overlay::IntersectRay(glm::vec3 ray_start_g, glm::vec3 direction, float max_len) Ray Overlay::IntersectRay(glm::vec3 origin, glm::vec3 direction, float max_len)
{ {
float dist = max_len; float dist = max_len;
auto ray_end_g = ray_start_g + direction * max_len; auto end = origin + direction * max_len;
auto panel_transform = GetTransformAbsolute(); auto panel_transform = GetTransformAbsolute();
auto panel_pos = GetPos(panel_transform); auto panel_pos = GetPos(panel_transform);
auto ray_start = glm::inverse(panel_transform) * glm::vec4(ray_start_g - panel_pos, 0); auto a = glm::inverse(panel_transform) * glm::vec4(origin - panel_pos, 0);
auto ray_end = glm::inverse(panel_transform) * glm::vec4(ray_end_g - panel_pos, 0); auto b = glm::inverse(panel_transform) * glm::vec4(end - panel_pos, 0);
float length_frac = ray_start.z / (ray_start.z - ray_end.z); float r = a.z / (a.z - b.z);
auto hit_pos = ray_start + (ray_end - ray_start) * length_frac; auto p = a + (b - a) * r;
// printf("panel pos: (%.2f,%.2f,%.2f)\n", panel_pos.x, panel_pos.y, panel_pos.z);
// printf("a: (%.2f,%.2f,%.2f)\n", a.x, a.y, a.z);
// printf("b: (%.2f,%.2f,%.2f)\n", b.x, b.y, b.z);
// printf("r: %.2f\n", r);
// printf("p: (%.2f,%.2f,%.2f)\n", p.x, p.y, p.z);
// clang-format off if (b.z < a.z && b.z < 0 && glm::abs(p.x) < (_width_m * 0.5f) && glm::abs(p.y) < (_width_m * 0.5f * _ratio))
if (ray_end.z < ray_start.z
&& ray_end.z < 0
&& glm::abs(hit_pos.x) < (_width_m * 0.5f)
&& glm::abs(hit_pos.y) < (_width_m * 0.5f * _ratio)
&& length_frac > 0)
{ {
// clang-format on dist = glm::min(r * max_len, max_len);
dist = glm::min(length_frac * max_len, max_len);
} }
return Ray{.overlay = this, .distance = dist, .local_pos = hit_pos, .hit_panel = nullptr}; return Ray{.overlay = this, .distance = dist, .local_pos = p, .hit_panel = nullptr};
} }
glm::mat4x4 Overlay::GetTransformAbsolute() glm::mat4x4 Overlay::GetTransformAbsolute()