mirror of
https://github.com/mii443/rust-openvr.git
synced 2025-08-23 16:49:31 +00:00
updated readme
This commit is contained in:
110
Readme.md
110
Readme.md
@ -1,6 +1,108 @@
|
||||
This projects goal is to provide Rift bindings for Rust.
|
||||
VR-RS
|
||||
=====
|
||||
|
||||
Right now it is none functional, only grabbing a few pointers from the framework.
|
||||
[](https://travis-ci.org/csherratt/vr-rs)
|
||||
|
||||
libovr.a is not supplied with this library for legal reasons. You may obtain a copy from
|
||||
https://developer.oculusvr.com/ .
|
||||
VR-RS providers bindings for the Oculus's libovr. Currently it only provides bindings for 0.2.5c.
|
||||
|
||||
Building
|
||||
--------
|
||||
|
||||
Make sure all submodules were cloned first.
|
||||
|
||||
git submodule update --init --recursive
|
||||
|
||||
Building is straight forward.
|
||||
|
||||
./configure
|
||||
make
|
||||
|
||||
|
||||
Using VR-RS
|
||||
-----------
|
||||
|
||||
# Initializing
|
||||
|
||||
```rust
|
||||
|
||||
extern crate ovr = "oculus-vr";
|
||||
|
||||
fn main() {
|
||||
// initialize the library
|
||||
ovr::init();
|
||||
|
||||
// create a device manager context
|
||||
let dm = match ovr::DeviceManager::new() {
|
||||
Some(dm) => dm,
|
||||
None => {
|
||||
println!("Could not initialize Oculus Device Manager");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
// create hmd instance
|
||||
let hmd = match dm.enumerate() {
|
||||
Some(d) => d,
|
||||
None => {
|
||||
println!("Could not enumerate Oculus HMD.");
|
||||
println!("Was it unplugged?");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
// create a sensor fusion, this is used to gather sensor readings
|
||||
let sensor_fusion = match ovr::SensorFusion::new() {
|
||||
Some(sf) => sf,
|
||||
None => {
|
||||
println!("Could not allocate Sensor Fusion")
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
// get a sensor device from the hmd.
|
||||
let sensor = match hmd.get_sensor() {
|
||||
Some(sensor) => sensor,
|
||||
None => {
|
||||
println!("Could not get the sensor from HMD");
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
// when new sensor readings are ready they will automatically
|
||||
// update the sensor fusions state
|
||||
sensor_fusion.attach_to_sensor(&sensor);
|
||||
|
||||
let hmd_info = hmd.get_info();
|
||||
}
|
||||
```
|
||||
|
||||
# Getting head tracking results
|
||||
|
||||
```rust
|
||||
// return a Quaternion of the predicted head's position
|
||||
let orientation = sensor_fusion.get_predicted_orientation(None);
|
||||
```
|
||||
|
||||
The orientation can be applied to your view matrix create a new view matrix that accurately tracks
|
||||
the position of the head.
|
||||
|
||||
# Rendering the HMD barrel distortion.
|
||||
|
||||
vr-rs includes the shader and some utilities that can help create the barrel distortion.
|
||||
|
||||
First you must render an undistorted scene into a texture. vr-rs supplies a utility
|
||||
function `create_reference_matrices` that can be used to create the view / projection matrices.
|
||||
|
||||
```rust
|
||||
let ((projection_left, projection_right),
|
||||
(view_left, view_right)) = ovr::create_reference_matrices(&hmd_info, &view_matrix_base, scale);
|
||||
```
|
||||
|
||||
`view_matrix_base` is the view matrix created by applying the head tracking with any other orientation
|
||||
or positions required to move the camera.
|
||||
|
||||
`scale` is the scaled size of the texture compared to the hmd native resolution. `1.` is a good starting
|
||||
point.
|
||||
|
||||
The best resource to drawing the barrel distortion is going to be the
|
||||
[Oculus VR pdf](http://static.oculusvr.com/sdk-downloads/documents/Oculus_SDK_Overview.pdf#subsection.5.5).
|
Reference in New Issue
Block a user