commit 90982b48fcf6fb9dbe6214849b8b7d909a63e2eb Author: Mamadou Babaei Date: Mon Jul 13 19:32:26 2026 +0200 initial commit diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..a53e39d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,37 @@ +# Keep CRLF out of the repository +* text=auto eol=lf + +# Always keep config files (even the empty ones under Git, not LFS) +Config/* filter= diff= merge= text + +# In case the git binary/text auto-detection algorithm fails, in order to avoid +# line-ending normalization, treat these files as binary no matter what +*.{uasset,umap,3ds,fbx,flac,gif,jif,jiff,jpe,jpeg,jpg,m4a,mp3,mp4,ogg,png,psd,ttf,wav,webp,xcf} binary + +# LFS: UE4 file types +*.uasset filter=lfs diff=lfs merge=lfs -text +*.umap filter=lfs diff=lfs merge=lfs -text + +# LFS: raw content types +*.3ds filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.flac filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.jif filter=lfs diff=lfs merge=lfs -text +*.jiff filter=lfs diff=lfs merge=lfs -text +*.jpe filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.m4a filter=lfs diff=lfs merge=lfs -text +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.webp filter=lfs diff=lfs merge=lfs -text +*.xcf filter=lfs diff=lfs merge=lfs -text + +# LFS: everything under Content/ +Content/**/* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1d32339 --- /dev/null +++ b/.gitignore @@ -0,0 +1,132 @@ +# Explcitly ignore annoying Windows files, regardless of where they are +[Dd]esktop.ini +Thumbs.db + +# Explcitly ignore annoying macOS files, regardless of where they are +.DS_Store + +# Makefile; only in the project root +/Makefile + +# CMake; only in the project root +/CMakeLists.txt + +# QMake / Qt Creator +*.pro +*Config.pri +*Defines.pri +*Header.pri +*Includes.pri +*Source.pri +.qmake.stash +*.autosave +*.pro.user +*.pro.user.* +CMakeLists.txt.user +CMakeLists.txt.user.* + +# Visual Studio +.vs/ +.vsconfig +*.sln +*.suo +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Visual Studio Code +.vscode/ +*.code-workspace + +# Code::Blocks +*.workspace + +# CodeLite +*CodeLitePreProcessor.txt + +# KDevelop +.kdev4/ +*.kdev4 + +# CLion +*CodeCompletionFolders.txt + +# IntelliJ IDE +.idea/ + +# Xcode +*.xcodeproj +*.xcworkspace + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/*/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +!*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/*/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* + +# Misc +.ignore + +# The Platforms folder +Platforms/ + +# Rider .uproject configuration +*.DotSettings.user +*.uproject.DotSettings.user \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..2949a94 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,23 @@ +``` +MIT License + +Copyright (c) 2020 - 2026 SenseGlove + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +``` diff --git a/README.md b/README.md new file mode 100644 index 0000000..b0585b9 --- /dev/null +++ b/README.md @@ -0,0 +1,64 @@ +# SenseGlove OpenXR Hand Interactions System From Scratch (Blueprint Only) + +This repository contains the demo project showcased in the [**SenseGlove Developer Spotlight: Building OpenXR Hand Interactions from Scratch in Unreal Engine**](https://youtu.be/J18c99vl6dE). + +The project demonstrates how to build a complete OpenXR hand interaction system using Unreal Engine Blueprints and the SenseGlove Unreal Engine Plugin from scratch without relying on `SGPawn`. Rather than relying on pre-built interaction frameworks, it starts with raw OpenXR hand-tracking data and incrementally builds the core functionality required for natural VR interactions. + +This was part of an internship project at SenseGlove. + +## Features + +- OpenXR hand tracking +- Blueprint-only implementation +- Hand joint visualization +- Custom hand interaction framework +- Object grabbing and manipulation +- Collision and overlap detection +- Physics-based interactions +- Gesture-driven interactions +- Haptics addition using SenseGlove API +- Compatible with modern Unreal Engine versions + +This project is intended as an educational reference for Unreal Engine and XR developers who want to understand how OpenXR hand interactions work under the hood and build their own interaction systems from scratch. + +## Compatibility + +This demo is compatible with Unreal Engine `5.7`. + +## Video Documentation + +[Building OpenXR Hand Interactions from Scratch | SenseGlove Unreal Engine Plugin](https://youtu.be/J18c99vl6dE) + +[![Building OpenXR Hand Interactions from Scratch | SenseGlove Unreal Engine Plugin](https://img.youtube.com/vi/J18c99vl6dE/0.jpg)](https://youtu.be/J18c99vl6dE) + +## How to checkout + +The most straightforward way to download this project is to click on the kebab menu (three vertical dots) located at the top-right of the screen and choose Download as Zip to obtain the source code for that branch or tag. + +__NOTE__: This repository is fully self-contained and ships a compatible version of the SenseGlove Unreal Engine Plugin with itself without relying on Git Submodules. So, once you download it using the kebab menu you can simply start using the project without the extra work of obtaining the plugin separately. + +## License + +``` +MIT License + +Copyright (c) 2020 - 2026 SenseGlove + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +```