我对VTK很新,我真的很喜欢使用它。
现在,我希望独立地与多个对象进行交互。例如,如果我在渲染窗口中有5个对象,我只想移动,旋转并与所选对象进行交互;而其余4个物体都停留在原处。
目前,相机正在进行魔术,当我旋转独立物体时,其他物体同时移动,我不希望这种情况发生。
我还想将所有对象存储在内存中。
我打算使用C ++。
这是我的班级结构......
class ScreenObjects
{
vtkActor (LinkedList); // I intend on using a linkedlist to store all the actors
public:
ScreenObjects(); // Constructor. Initializes vtkActor to null.
void readSTLFile(); // Reads the STL File
bool setObject(); // Sets current object, so you can only interact with the selected object
}
我在课堂上遗漏了很多功能和细节,因为我不知道还有哪些内容可供使用。我也在考虑将两个物体连在一起,但同样,我也不知道如何在课堂上加入这些物品;任何有关的信息都将受到赞赏。
如果能得到我的想法,我会非常感激。这对我来说是一件非常有趣的事情,这对我来说意义重大,我的意思是从内心深处。
答案 0 :(得分:0)
首先,您应该阅读一些教程和演示文稿,例如: http://www.cs.rpi.edu/~cutler/classes/visualization/F10/lectures/03_interaction.pdf
我说因为你现在正在移动相机。
然后你应该看看VTK的例子。它们对所有VTK课程都非常有帮助。 特别是对你的问题看看: http://www.vtk.org/Wiki/VTK/Examples/Cxx/Interaction/Picking
基本上你必须创建一个 vtkRenderWindowInteractor 派生类来获取鼠标事件(onMouseDown,onMouseUp,onMouseMove,...)。
并使用 vtkPropPicker 将光线从鼠标位置拍摄到3D视图并获取vtkActor。
现在你可以在你的vtkRenderWindowInteractor派生类中存储onMouseDown你要移动的vtkActor和currentMouse位置。当用户释放鼠标(onMouseUp)时,只需获取新鼠标位置并使用onMouseDown / onMouseUp位置的差异来修改vtkActor位置。