2016-04-10 13:31:30 +02:00
2015-07-05 01:24:27 -04:00
2015-11-10 02:13:01 -05:00
2015-11-10 02:13:01 -05:00
2015-11-10 02:13:01 -05:00
2014-06-26 08:10:07 -07:00
2015-06-16 20:19:01 -04:00
2014-09-26 02:32:29 -04:00
2015-06-13 16:38:07 -04:00

rust-openvr

Build Status

rust-openvr is a binding for openvr. It's still in progress. Tests are automatically ran by travis and successful builds will be pushed to the stable branch, (for nightly builds use nightly branch, for beta buils use beta branch)

Building

rust-openvr is fully cargoized. to Compile

cargo build

To add as a dependency using cargo Cargo add the following to your Cargo.toml. Will be added to crates.io once we've a stable version.

[dependencies.openvr]
git = "https://github.com/auruss/rust-openvr.git"

Using rust-openvr

Initializing


extern crate openvr;

use ovr::{SensorCapabilities, Ovr};

fn main() {
    // Initalize the Oculus VR library
    let ovr = match Ovr::init() {
        Some(ovr) => ovr,
        None => {
             println!("Could not initialize Oculus SDK");
            return;           
        }
    };

    // get the first available HMD device, returns None
    // if no HMD device is currently plugged in
    let hmd = match ovr.first_hmd() {
        Some(hmd) => hmd,
        None => {
            println!("Could not get hmd");
            return;
        }
    };

    // start the sensor recording, Require orientation tracking
    let started = hmd.start_sensor(SensorCapabilities::new().set_orientation(true),
                                   SensorCapabilities::new().set_orientation(true));
    if !started {
        println!("Could not start sensor");
        return;
    }
}

Render loop

The OpenVR SDK will handle most of the heavy lifting of the barrel distortion.

fn render(frame_index: uint, hmd: &ovr::Hmd, base_view: &Matrix4<f32>) {
    // start a new frame, the frame_index should increment each frame
    let frame_timing = hmd.begin_frame(frame_index);
    let desc = hmd.get_description();

    for &eye in [ovr::EyeLeft, ovr::EyeRight].iter() {
        // start rendering a new eye, this will give the most current
        // copy of the pose from the HMD tracking sensor
        let pose = self.window.get_hmd().begin_eye_render(eye);

        // base_view * pose * eye_view_adjustment
        let view = base_view.mul_m(&pose.orientation.to_matrix4())
                            .mul_m(&Matrix4::translate(&eye.view_adjust));
        let projection = desc.eye_fovs.eye(eye).default_eye_fov;

        // render to texture
        render();

        let texture = ovr::Texture(width, height,
                                   viewport_offset_x, viewport_offset_y,
                                   viewport_width, viewport_height,
                                   opengl_texture_id);
        hmd.end_eye_render(eye, pose, &texture);
    }

    // this will swap the buffers and frame sync
    hmd.end_frame();
}
Description
No description provided
Readme 12 MiB
Languages
Rust 100%