#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
class vtkMyCallback : public vtkCommand
{
public:
static vtkMyCallback* New();
virtual void Execute(vtkObject* caller, unsigned long eventId, void* callData);
};
vtkMyCallback* vtkMyCallback::New()
{
return new vtkMyCallback;
}
void vtkMyCallback::Execute(vtkObject* caller, unsigned long eventId, void* callData)
{
vtkRenderer* renderer = reinterpret_cast(caller);
cout << renderer->GetActiveCamera()->GetPosition()[0] << " "
<< renderer->GetActiveCamera()->GetPosition()[1] << " "
<< renderer->GetActiveCamera()->GetPosition()[2] << endl;
}
class vtkMyCallback2 : public vtkCommand
{
public:
static vtkMyCallback2* New();
virtual void Execute(vtkObject* caller, unsigned long eventId, void* callData);
};
vtkMyCallback2* vtkMyCallback2::New()
{
return new vtkMyCallback2;
}
void vtkMyCallback2::Execute(vtkObject* caller, unsigned long eventId, void* callData)
{
vtkActor* actor = reinterpret_cast(caller);
actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
}
int main(void)
{
// 创建一个cone
vtkConeSource* cone = vtkConeSource::New();
cone->SetResolution(5);
cone->SetHeight(3);
cone->SetRadius(1);
// 实例化一个cone映射器
vtkPolyDataMapper* coneMapper = vtkPolyDataMapper::New();
coneMapper->SetInputConnection(cone->GetOutputPort());
// 创建一个演员对象coneActor
vtkActor* coneActor = vtkActor::New();
coneActor->SetMapper(coneMapper);
// 实例化回调类
vtkMyCallback2* mycallback2 = vtkMyCallback2::New();
coneActor->AddObserver(vtkCommand::PickEvent, mycallback2);
mycallback2->Delete();
// 搭建舞台,实例化对象renderer
vtkRenderer* renderer = vtkRenderer::New();
renderer->AddActor(coneActor);
renderer->SetBackground(0.1, 0.2, 0.4);
// 实例化回调类
vtkMyCallback* mycallback = vtkMyCallback::New();
renderer->AddObserver(vtkCommand::StartEvent, mycallback);
mycallback->Delete();
// 实例化一个灯光对象
vtkSmartPointer light = vtkSmartPointer::New();
// light->SetSpecularColor(1.0, 0.0, 0.0); // 设置镜面反射光颜色为红色
// light->SetDiffuseColor(0.0, 1.0, 0.0); // 设置散射光为绿色
light->SetColor(1.0, 0.0, 0.0); // 设置环境光为红色
renderer->AddLight(light);
// 实例化一个相机对象camera
// 相对屏幕,x轴正方向:从左往右 y轴正方向:从下往上 z轴正方向:从里往外
vtkSmartPointer camera = vtkSmartPointer::New();
camera->SetPosition(5.0, 0.0, 0.0); // (x, y, z)
camera->SetFocalPoint(-1.0, 0.0, 0.0); // 焦点方向
camera->SetViewUp(0.0, 1.0, 0.0); // 线上向量
renderer->SetActiveCamera(camera);
// 实例化一个窗口对象renWin
vtkRenderWindow* renWin = vtkRenderWindow::New();
renWin->SetSize(400, 200);
renWin->AddRenderer(renderer);
// 实例化一个交互对象
vtkRenderWindowInteractor* interactor = vtkRenderWindowInteractor::New();
interactor->SetRenderWindow(renWin);
renWin->Render();
interactor->Initialize();
interactor->Start();
// 释放内存
cone->Delete();
coneActor->Delete();
coneMapper->Delete();
renderer->Delete();
renWin->Delete();
interactor->Delete();
system("pause");
return 0;
}