Exploratory project for viewing remote image cubes on the Oculus Quest 2. The software uses a client-server approach, with gRPC used for communication.
The server is written in C++, and should work on most Linux distributions, or Windows 10 (for now). The build process has been tested on Ubuntu 20.04.2 LTS and Windows 10 (using vcpkg).
- C++17 compatible compiler (GCC 8+, clang 11, msvc 2017+). Tested on GCC 9.3 and msvc 2019.
- cmake 3.12 or newer.
- pkg-config (
pkg-config
on Debian;pkgconf
in vcpkg). - Protocol buffer libraries and compilers (
libprotobuf-dev
andprotobuf-compiler
on Debian;protobuf
in vcpkg). - gRPC and protocol buffer libraries and compilers (
libgrpc++-dev
andprotobuf-compiler-grpc
on Debian;grpc
in vcpkg). - fmt and spdlog libraries (
libfmt-dev
andlibspdlog-dev
on Debian;fmt
andspdlog
in vcpkg). - cfitsio library (
libcfitsio-dev
on Debian;cfitsio
in vcpkg). - [Boost.MultiArray]https://www.boost.org/doc/libs/1_77_0/libs/multi_array/doc/index.html) template library (
libboost-dev
on Debian;boost-multi-array
in vcpkg).
- Checkout the repo and all submodules using
git submodule update --init --recursive
. - Create a build folder and
cd
into it. - Run
cmake <path_to_source_folder>
. On Windows platforms you may need to specify the vcpkg toolchain file using-DCMAKE_TOOLCHAIN_FILE=C:\<path_to_vcpkg_root_dir>\scripts\buildsystems\vcpkg.cmake
. - Run
make
(ornmake
for msvc).
The client is written in C#, and has only been tested on Windows (building for Android) with Unity 2021.1. The
powershell script CompileGrpcServiceWindows.ps1
needs to be run before running Unity.
A config.json
file should be placed in the persistent data path, in order to specify the server address and file/folder paths. An example config is shown below:
{
"serverAddress": "localhost:50051",
"folder": "fits/vr",
"file": "m81.fits",
"maxCubeSizeMb": 200
}
The test scripts are written in TypeScript, and require NodeJS and NPM. Run npm install
and the powershell script CompileGrpcServiceWindows.ps1
before running the client tests using npm run start client
.