#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);
#include <string>
#include <iostream>
#include <pcl/io/io.h>
#include <pcl/io/vtk_lib_io.h>
#include <vector>
#include <pcl/visualization/pcl_visualizer.h>
#include <string>
#include <Eigen/Core>
#include <pcl/common/transforms.h>
using namespace std;
bool next_step = false;
int a = 0;
void SpaceKeyOccurred(const pcl::visualization::KeyboardEvent &key, void *nothing)
{
if (key.getKeySym() == "space" && key.keyDown())
{
next_step = true;
}
}
int main()
{
pcl::visualization::PCLVisualizer viewer;
Eigen::Vector3f vectorb(10, 0, 0);
float theta = M_PI / 6;
Eigen::Matrix3f a_matrix = Eigen::Matrix3f::Identity(); //绕Z转
a_matrix << cos(theta) , sin(theta) , 0 ,
-sin(theta) , cos(theta) , 0 ,
0 , 0 , 1 ;
Eigen::Matrix3f b_matrix = Eigen::Matrix3f::Identity(); //绕Y转
b_matrix<< cos(theta) , 0 , -sin(theta),
0 , 1 , 0 ,
sin(theta) , 0 , cos(theta) ;
Eigen::Matrix3f c_matrix = Eigen::Matrix3f::Identity(); //绕X转
c_matrix << 1 , 0 , 0 ,
0 , cos(theta) , sin(theta) ,
0 , -sin(theta) , cos(theta) ;
Eigen::Quaternionf bboxQuaternion(a_matrix);
viewer.addCube(vectorb,bboxQuaternion, 10, 10, 10,"bbox1");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_REPRESENTATION, pcl::visualization::PCL_VISUALIZER_REPRESENTATION_WIREFRAME, "bbox1");
viewer.addCoordinateSystem(10.0);
viewer.setBackgroundColor(1.0,1.0,1.0);
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 5, "bbox1");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 1.0, 0.0, 0.0, "bbox1");
viewer.registerKeyboardCallback(&SpaceKeyOccurred, (void*)NULL); //注册键盘回掉函数
while (!viewer.wasStopped())
{
viewer.spinOnce(100);
if (next_step && a<2)
{
Eigen::Matrix4f transform = Eigen::Matrix4f::Identity();
if (a==0)
{
Eigen::Quaternionf bboxQuaternion2(b_matrix*a_matrix);
viewer.addCube(vectorb, bboxQuaternion2, 10, 10, 10, "bbox2");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_REPRESENTATION, pcl::visualization::PCL_VISUALIZER_REPRESENTATION_WIREFRAME, "bbox2");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 5, "bbox2");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0.0, 1.0, 0.0, "bbox2");
}
else if (a==1)
{
Eigen::Quaternionf bboxQuaternion2(c_matrix*b_matrix*a_matrix);
viewer.addCube(vectorb, bboxQuaternion2, 10, 10, 10, "bbox3");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_REPRESENTATION, pcl::visualization::PCL_VISUALIZER_REPRESENTATION_WIREFRAME, "bbox3");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_LINE_WIDTH, 5, "bbox3");
viewer.setShapeRenderingProperties(pcl::visualization::PCL_VISUALIZER_COLOR, 0.0, 0.0, 1.0, "bbox3");
}
next_step = false;
a++;
}
}
return 0;
}
先绕Z轴旋转
再绕Y轴旋转
再绕X轴旋转