#include <Open3D/Open3D.h>
#include <Eigen/Core>
#include <Eigen/Cholesky>
#include <Eigen/Geometry>
using namespace open3d;
int main(){
bool flag_exit = false;
bool is_geometry_added = false;
visualization::VisualizerWithKeyCallback vis;
vis.RegisterKeyCallback(GLFW_KEY_ESCAPE,
[&](visualization::Visualizer *vis) {
flag_exit = true;
return false;
});
cv::Rect roi(100,100,100,100);
vector<Eigen::Vector3d> points_;
for (int r=roi.tl().y;r<roi.br().y;r++)
{
points_.push_back(Eigen::Vector3d(roi.tl().x,r,0));
points_.push_back(Eigen::Vector3d(roi.br().x, r, 0));
}
for (int c = roi.tl().x; c<roi.br().x; c++)
{
points_.push_back(Eigen::Vector3d(c, roi.tl().y, 0));
points_.push_back(Eigen::Vector3d(c, roi.br().y, 0));
}
vis.CreateVisualizerWindow("Open3D none-block Test");
auto cloud_ptr = std::make_shared<geometry::PointCloud>();
cloud_ptr->PaintUniformColor(Eigen::Vector3d(0, 1, 0));
cloud_ptr->points_.resize(points_.size());
int inc_x = 0;
do {
for (int j = 0; j < points_.size(); j++)
{
cloud_ptr->points_[j](0) = points_[j](0) + inc_x;
cloud_ptr->points_[j](1) = points_[j](1);
cloud_ptr->points_[j](2) = points_[j](2);
}
if (!is_geometry_added) {
vis.AddGeometry(cloud_ptr);
is_geometry_added = true;
}
if ((roi.br().x+ inc_x) > 400)
{
inc_x = 0;
}
else
{
inc_x++;
}
// Update visualizer
vis.UpdateGeometry();
vis.PollEvents();
vis.UpdateRender();
} while (!flag_exit);
vis.DestroyVisualizerWindow();
return 0;
}