最近搞VTK平面旋转+平移,然后计算点投影到平面上的坐标,没人交流还是费劲啊,过程不说了
一直以为用vtkPlane中的ProjectPoint这个最好,不过由于我这里涉及到重新创建平面的过程,反倒不好。
关键示例代码如下:
vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();
plane->SetNormal(normal);
plane->SetOrigin(origin);
...
plane->ProjectPoint(p, origin, normal, projected);
又搜索资料找到vtkTransform中的TransformDoubleVector。这个对于目前来说还比较好,确实知道它的旋转矩阵,可是调用它一定要注意,不要连续多次,否则只保存最后一次的计算结果。如果不提前把结果取出,后续就会有错误。
vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
...
double *newPoint = transform->TransformDoubleVector(oldPoint); //仅仅取出指针还不行,如果再次调用计算,这个指针指向的数据是不对的,要保存数据的其他内存了。