fix conversion functions to use appropriate vtk function
This commit is contained in:
parent
f8ad3c0204
commit
9c20e77013
@ -44,8 +44,8 @@ namespace cv
|
||||
Affine3f getViewerPose();
|
||||
void setViewerPose(const Affine3f &pose);
|
||||
|
||||
void convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord);
|
||||
void converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction);
|
||||
void convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord);
|
||||
void converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction);
|
||||
|
||||
void spin();
|
||||
void spinOnce(int time = 1, bool force_redraw = false);
|
||||
|
@ -51,5 +51,5 @@ cv::viz::Camera cv::viz::Viz3d::getCamera() const { return impl_->getCamera(); }
|
||||
void cv::viz::Viz3d::setViewerPose(const Affine3f &pose) { impl_->setViewerPose(pose); }
|
||||
cv::Affine3f cv::viz::Viz3d::getViewerPose() { return impl_->getViewerPose(); }
|
||||
|
||||
void cv::viz::Viz3d::convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord) { impl_->convertToWindowCoordinates(pt, window_coord); }
|
||||
void cv::viz::Viz3d::converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction) { impl_->converTo3DRay(window_coord, origin, direction); }
|
||||
void cv::viz::Viz3d::convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord) { impl_->convertToWindowCoordinates(pt, window_coord); }
|
||||
void cv::viz::Viz3d::converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction) { impl_->converTo3DRay(window_coord, origin, direction); }
|
@ -642,32 +642,24 @@ cv::Affine3f cv::viz::Viz3d::VizImpl::getViewerPose ()
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void cv::viz::Viz3d::VizImpl::convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord)
|
||||
void cv::viz::Viz3d::VizImpl::convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord)
|
||||
{
|
||||
// Use the built in function of renderer
|
||||
double point_wcs[3] = {pt.x, pt.y, pt.z};
|
||||
renderer_->WorldToView(point_wcs[0], point_wcs[1], point_wcs[2]);
|
||||
window_coord.x = point_wcs[0];
|
||||
window_coord.y = point_wcs[1];
|
||||
window_coord.z = point_wcs[2];
|
||||
Vec3d window_pt;
|
||||
vtkInteractorObserver::ComputeWorldToDisplay(renderer_, pt.x, pt.y, pt.z, window_pt.val);
|
||||
window_coord = window_pt;
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
void cv::viz::Viz3d::VizImpl::converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction)
|
||||
void cv::viz::Viz3d::VizImpl::converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction)
|
||||
{
|
||||
// Use the built in function of renderer
|
||||
double point_view[3] = {window_coord.x, window_coord.y, window_coord.z};
|
||||
renderer_->ViewToWorld(point_view[0], point_view[1], point_view[2]);
|
||||
Vec4d world_pt;
|
||||
vtkInteractorObserver::ComputeDisplayToWorld(renderer_, window_coord.x, window_coord.y, window_coord.z, world_pt.val);
|
||||
|
||||
vtkCamera &active_camera = *renderer_->GetActiveCamera();
|
||||
double *cam_pos = active_camera.GetPosition();
|
||||
origin.x = cam_pos[0];
|
||||
origin.y = cam_pos[1];
|
||||
origin.z = cam_pos[2];
|
||||
direction[0] = point_view[0] - cam_pos[0];
|
||||
direction[1] = point_view[1] - cam_pos[1];
|
||||
direction[2] = point_view[2] - cam_pos[2];
|
||||
normalize(direction);
|
||||
Vec3d cam_pos;
|
||||
active_camera.GetPosition(cam_pos.val);
|
||||
origin = cam_pos;
|
||||
direction = normalize(Vec3d(world_pt.val) - cam_pos);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -126,8 +126,8 @@ public:
|
||||
void setViewerPose(const Affine3f &pose);
|
||||
Affine3f getViewerPose();
|
||||
|
||||
void convertToWindowCoordinates(const Point3f &pt, Point3f &window_coord);
|
||||
void converTo3DRay(const Point3f &window_coord, Point3f &origin, Vec3f &direction);
|
||||
void convertToWindowCoordinates(const Point3d &pt, Point3d &window_coord);
|
||||
void converTo3DRay(const Point3d &window_coord, Point3d &origin, Vec3d &direction);
|
||||
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user