https://github.com/voltr0x/vulkan-xr
XR game using OpenXR and Vulkan in C++
https://github.com/voltr0x/vulkan-xr
cpp17 openxr openxr-sample vulkan-api
Last synced: about 1 year ago
JSON representation
XR game using OpenXR and Vulkan in C++
- Host: GitHub
- URL: https://github.com/voltr0x/vulkan-xr
- Owner: voltr0x
- Created: 2024-02-11T06:15:53.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-28T06:14:26.000Z (over 1 year ago)
- Last Synced: 2025-01-14T01:49:59.534Z (over 1 year ago)
- Topics: cpp17, openxr, openxr-sample, vulkan-api
- Language: C++
- Homepage:
- Size: 35.7 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# vulkan-xr
Followed @tdbe's tutorial to learn the essentials of creating an XR game using OpenXR and Vulkan in C++

## Key Features Implemented:
### XR Locomotion:
- Enables rotating and accelerated panning of the scene by grabbing with both hands, providing a 'tunnel vision' external scene effect.
- Implemented using state machines for movement and visual effects.
### Gameplay Mechanics
- Implements a mechanics system based on a list of GameBehaviour objects processed by the main loop.
- Each behavior is created, updated, and destroyed during runtime.
- Includes sample mechanics for locomotion, hand interactions, XR input testing, and world objects.
### 'GameData.h'
- Defines 'GameObject' attributes such as materials, models, and properties like world matrix and visibility.
- Introduces 'PlayerObject' with its associated game objects and active states.
- Defines materials with shaders, descriptor-set uniform data, and optional shared pipelines for operations like blend modes.
### Rendering
- Leveraged Vulkan's multiview capabilities to optimize rendering performance and enhance the immersive experience in the XR environment.
- Modified the rendering pipeline by addressing the complexities of Khronos Vulkan and OpenXR implementation.
- Supports per-material, per-model, and per-pipeline properties, facilitating easy creation of materials with unique attributes like transparency and double-sidedness.
- The render pipeline dynamically adapts if default material properties are modified.
### 'Input' Class and 'InputData' in 'Inputspace'
- Implements proper XR input handling, supporting various controllers and headsets with customizable binding paths and action sets.
- Provides easy access to input data and haptic feedback functionalities through 'InputData' and 'InputHaptics'.
- Offers controller and head poses, action states (e.g., buttons, sticks, triggers), user presence detection, and haptic feedback output.
- Exposes matrices and XR action state data for further customization.
### 'Utils' Class
- Includes utility functions for XR, input handling, and additional game development math and operations.