diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp index 97d217d0df31e2b6d2c885a9d518e2be8b268481..46a42a38baf052546951421a42c266babe20112e 100644 --- a/applications/gui/src/camera.cpp +++ b/applications/gui/src/camera.cpp @@ -47,9 +47,11 @@ static Eigen::Affine3d create_rotation_matrix(float ax, float ay, float az) { ftl::gui::Camera::Camera(ftl::gui::Screen *screen, int fsmask, int fid, ftl::codecs::Channel c) : screen_(screen), fsmask_(fsmask), fid_(fid), texture1_(GLTexture::Type::BGRA), texture2_(GLTexture::Type::BGRA), depth1_(GLTexture::Type::Float), channel_(c),channels_(0u) { - eye_ = Eigen::Vector3d(0.0f, 0.0f, 0.0f); - neye_ = Eigen::Vector4d(0.0f, 0.0f, 0.0f, 0.0f); + + eye_ = Eigen::Vector3d::Zero(); + neye_ = Eigen::Vector4d::Zero(); rotmat_.setIdentity(); + //up_ = Eigen::Vector3f(0,1.0f,0); lerpSpeed_ = 0.999f; sdepth_ = false; @@ -99,12 +101,33 @@ ftl::gui::Camera::Camera(ftl::gui::Screen *screen, int fsmask, int fid, ftl::cod state_.getLeft() = ftl::rgbd::Camera::from(intrinsics_); state_.getRight() = state_.getLeft(); - Eigen::Matrix4d pose; - pose.setIdentity(); - state_.setPose(pose); + { + Eigen::Matrix4d pose; + pose.setIdentity(); + state_.setPose(pose); - for (auto &t : transforms_) { - t.setIdentity(); + for (auto &t : transforms_) { + t.setIdentity(); + } + } + { + double camera_initial_x = intrinsics_->value("camera_x", 0.0); + double camera_initial_y = intrinsics_->value("camera_y", -1.75); + double camera_initial_z = intrinsics_->value("camera_z", 0.0); + + double lookat_initial_x = intrinsics_->value("lookat_x", 1.0); + double lookat_initial_y = intrinsics_->value("lookat_y", 0.0); + double lookat_initial_z = intrinsics_->value("lookat_z", 0.0); + + Eigen::Vector3f head(camera_initial_x, camera_initial_y, camera_initial_z); + Eigen::Vector3f lookat(lookat_initial_x, lookat_initial_y, lookat_initial_z); + // TODO up vector + Eigen::Matrix4f pose = nanogui::lookAt(head, head+lookat, Eigen::Vector3f(0.0f, 1.0f, 0.0f)); + + eye_ = Eigen::Vector3d(camera_initial_x, camera_initial_y, camera_initial_z); + neye_ = Eigen::Vector4d(eye_(0), eye_(1), eye_(2), 0.0); + rotmat_ = pose.cast<double>(); + rotmat_.block(0, 3, 3, 1).setZero(); } } }