#include "vtkSphereSource.h"
#include "vtkPolyDataMapper.h"
#include "vtkDataSetMapper.h"
#include "vtkNew.h"
#include "vtkActor.h"
#include "vtkConeSource.h"
#include "vtkGlyph3D.h"
#include "vtkRenderer.h"
#include "vtkRenderWindow.h"
#include "vtkNamedColors.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkInteractorStyleTrackballCamera.h"

int main()
{
    vtkNew<vtkSphereSource>sphere;
    sphere->SetThetaResolution(20);
    sphere->SetPhiResolution(20);

    vtkNew<vtkPolyDataMapper>sphereMapper;
    sphereMapper->SetInputConnection(sphere->GetOutputPort());

    vtkNew<vtkActor>sphereActor;
    sphereActor->SetMapper(sphereMapper);

    vtkNew<vtkConeSource>cone;
    cone->SetResolution(4);

    vtkNew<vtkGlyph3D>glyph;
    glyph->SetInputConnection(sphere->GetOutputPort());
    glyph->SetSourceConnection(cone->GetOutputPort());
    glyph->SetVectorModeToUseNormal();
    glyph->SetScaleModeToScaleByVector();
    glyph->SetScaleFactor(0.10);

    vtkNew<vtkPolyDataMapper>spikeMapper;
    spikeMapper->SetInputConnection(glyph->GetOutputPort());

    vtkNew<vtkActor>spikeActor;
    spikeActor->SetMapper(spikeMapper);

    vtkNew<vtkNamedColors>colors;

    vtkNew<vtkRenderer>ren;
    ren->AddActor(spikeActor);
    ren->AddActor(sphereActor);
    ren->SetBackground(colors->GetColor3d("MidnightBlue").GetData());

    vtkNew<vtkRenderWindow>renWin;
    renWin->AddRenderer(ren);
    renWin->SetSize(1000,800);

    vtkNew<vtkInteractorStyleTrackballCamera>style;

    vtkNew<vtkRenderWindowInteractor>iren;
    iren->SetInteractorStyle(style);
    iren->SetRenderWindow(renWin);

    ren->Render();
    iren->Initialize();
    iren->Start();

    return EXIT_SUCCESS;

}
