Merge pull request #189 from asajeffrey/sharpen-text
Improve reprojection on magicleap
This commit is contained in:
commit
fac4f0d347
|
@ -25,6 +25,7 @@ use clap::{App, Arg};
|
||||||
use pathfinder_geometry::basic::vector::{Vector2F, Vector2I};
|
use pathfinder_geometry::basic::vector::{Vector2F, Vector2I};
|
||||||
use pathfinder_geometry::basic::rect::RectF;
|
use pathfinder_geometry::basic::rect::RectF;
|
||||||
use pathfinder_geometry::basic::transform2d::Transform2DF;
|
use pathfinder_geometry::basic::transform2d::Transform2DF;
|
||||||
|
use pathfinder_geometry::basic::transform3d::Transform3DF;
|
||||||
use pathfinder_geometry::color::ColorU;
|
use pathfinder_geometry::color::ColorU;
|
||||||
use pathfinder_gl::GLDevice;
|
use pathfinder_gl::GLDevice;
|
||||||
use pathfinder_gpu::Device;
|
use pathfinder_gpu::Device;
|
||||||
|
@ -53,6 +54,9 @@ const CAMERA_SCALE_SPEED_2D: f32 = 6.0;
|
||||||
// How much the scene is scaled when a zoom button is clicked.
|
// How much the scene is scaled when a zoom button is clicked.
|
||||||
const CAMERA_ZOOM_AMOUNT_2D: f32 = 0.1;
|
const CAMERA_ZOOM_AMOUNT_2D: f32 = 0.1;
|
||||||
|
|
||||||
|
// Half of the eye separation distance.
|
||||||
|
const DEFAULT_EYE_OFFSET: f32 = 0.025;
|
||||||
|
|
||||||
const LIGHT_BG_COLOR: ColorU = ColorU {
|
const LIGHT_BG_COLOR: ColorU = ColorU {
|
||||||
r: 248,
|
r: 248,
|
||||||
g: 248,
|
g: 248,
|
||||||
|
@ -323,11 +327,23 @@ impl<W> DemoApp<W> where W: Window {
|
||||||
}
|
}
|
||||||
Event::SetEyeTransforms(new_eye_transforms) => {
|
Event::SetEyeTransforms(new_eye_transforms) => {
|
||||||
if let Camera::ThreeD {
|
if let Camera::ThreeD {
|
||||||
|
ref mut scene_transform,
|
||||||
ref mut eye_transforms,
|
ref mut eye_transforms,
|
||||||
..
|
..
|
||||||
} = self.camera
|
} = self.camera
|
||||||
{
|
{
|
||||||
*eye_transforms = new_eye_transforms;
|
*eye_transforms = new_eye_transforms;
|
||||||
|
// Calculate the new scene transform by lerp'ing the eye transforms.
|
||||||
|
*scene_transform = eye_transforms[0];
|
||||||
|
for (index, eye_transform) in eye_transforms.iter().enumerate().skip(1) {
|
||||||
|
let weight = 1.0 / (index + 1) as f32;
|
||||||
|
scene_transform.perspective.transform = scene_transform.perspective.transform.lerp(weight, &eye_transform.perspective.transform);
|
||||||
|
scene_transform.modelview_to_eye = scene_transform.modelview_to_eye.lerp(weight, &eye_transform.modelview_to_eye);
|
||||||
|
}
|
||||||
|
// TODO: calculate the eye offset from the eye transforms?
|
||||||
|
let z_offset = -DEFAULT_EYE_OFFSET * scene_transform.perspective.transform.c0.x();
|
||||||
|
scene_transform.modelview_to_eye = scene_transform.modelview_to_eye
|
||||||
|
.pre_mul(&Transform3DF::from_translation(0.0, 0.0, z_offset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Event::KeyDown(Keycode::Alphanumeric(b'w')) => {
|
Event::KeyDown(Keycode::Alphanumeric(b'w')) => {
|
||||||
|
|
|
@ -163,28 +163,36 @@ static void onNewInitArg(void* app_handle)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arg_list_len) {
|
if (!arg_list_len) {
|
||||||
if (MLResult_Ok != MLLifecycleGetInitArgByIndex(arg_list, 0, &arg)) {
|
|
||||||
ML_LOG(Error, "%s: Failed to get init arg.", application_name);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
if (MLResult_Ok != MLLifecycleGetFileInfoListLength(arg, &file_list_len)) {
|
|
||||||
ML_LOG(Error, "%s: Failed to get file list length.", application_name);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_list_len) {
|
if (MLResult_Ok != MLLifecycleGetInitArgByIndex(arg_list, 0, &arg)) {
|
||||||
if (MLResult_Ok != MLLifecycleGetFileInfoByIndex(arg, 0, &file_info)) {
|
ML_LOG(Error, "%s: Failed to get init arg.", application_name);
|
||||||
ML_LOG(Error, "%s: Failed to get file info.", application_name);
|
}
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MLResult_Ok != MLFileInfoGetFileName(file_info, &file_name)) {
|
if (MLResult_Ok != MLLifecycleGetFileInfoListLength(arg, &file_list_len)) {
|
||||||
ML_LOG(Error, "%s: Failed to get file name.", application_name);
|
ML_LOG(Error, "%s: Failed to get file list length.", application_name);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!file_list_len) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MLResult_Ok != MLLifecycleGetFileInfoByIndex(arg, 0, &file_info)) {
|
||||||
|
ML_LOG(Error, "%s: Failed to get file info.", application_name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MLResult_Ok != MLFileInfoGetFileName(file_info, &file_name)) {
|
||||||
|
ML_LOG(Error, "%s: Failed to get file name.", application_name);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file_name) {
|
||||||
|
ML_LOG(Error, "%s: File name is null.", application_name);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tell pathfinder to load the file
|
// Tell pathfinder to load the file
|
||||||
|
@ -198,6 +206,7 @@ static void onNewInitArg(void* app_handle)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ML_LOG(Info, "%s: Loading %s.", application_name, file_name);
|
||||||
magicleap_pathfinder_demo_load(app, file_name);
|
magicleap_pathfinder_demo_load(app, file_name);
|
||||||
MLLifecycleFreeInitArgList(&arg_list);
|
MLLifecycleFreeInitArgList(&arg_list);
|
||||||
}
|
}
|
||||||
|
|
|
@ -176,6 +176,15 @@ impl Transform3DF {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Linearly interpolate between transforms
|
||||||
|
pub fn lerp(&self, weight: f32, other: &Transform3DF) -> Transform3DF {
|
||||||
|
let c0 = self.c0 * F32x4::splat(weight) + other.c0 * F32x4::splat(1.0 - weight);
|
||||||
|
let c1 = self.c1 * F32x4::splat(weight) + other.c1 * F32x4::splat(1.0 - weight);
|
||||||
|
let c2 = self.c2 * F32x4::splat(weight) + other.c2 * F32x4::splat(1.0 - weight);
|
||||||
|
let c3 = self.c3 * F32x4::splat(weight) + other.c3 * F32x4::splat(1.0 - weight);
|
||||||
|
Transform3DF { c0, c1, c2, c3 }
|
||||||
|
}
|
||||||
|
|
||||||
/// Just like `gluPerspective()`.
|
/// Just like `gluPerspective()`.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_perspective(fov_y: f32, aspect: f32, z_near: f32, z_far: f32) -> Transform3DF {
|
pub fn from_perspective(fov_y: f32, aspect: f32, z_near: f32, z_far: f32) -> Transform3DF {
|
||||||
|
|
Loading…
Reference in New Issue