发现vtkSphereSource贴图不太好,应该使用vtkTexturedSphereSource
https://kitware.github.io/vtk-examples/site/Cxx/Texture/TexturedSphere/
https://blog.csdn.net/a15005784320/article/details/119711358
int main(int argc, char* argv[])
{
vtkSmartPointer<vtkPNGReader> reader = vtkSmartPointer<vtkPNGReader>::New();
reader->SetFileName("earth_geology_bath.png");
// vtkSmartPointer<vtkJPEGReader> reader = vtkSmartPointer<vtkJPEGReader>::New();
// reader->SetFileName("earthmap2k.jpg");
reader->Update();
vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();
texture->SetInputConnection(reader->GetOutputPort());
texture->InterpolateOn();
vtkSmartPointer<vtkTexturedSphereSource> sphere = vtkSmartPointer<vtkTexturedSphereSource>::New();
sphere->SetPhiResolution(100);
sphere->SetRadius(100);
sphere->SetThetaResolution(100);
vtkSmartPointer<vtkTextureMapToSphere> map_to_sphere = vtkSmartPointer<vtkTextureMapToSphere>::New();
map_to_sphere->SetInputConnection(sphere->GetOutputPort());
vtkSmartPointer<vtkTransformTextureCoords> transformTexture = vtkSmartPointer<vtkTransformTextureCoords>::New();
transformTexture->SetInputConnection(sphere->GetOutputPort());
transformTexture->SetPosition(0, 0, 0);
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputConnection(transformTexture->GetOutputPort());
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);
actor->SetTexture(texture);
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);
renderer->SetBackground(0.0, 0.0, 0.0);//black
vtkSmartPointer<vtkRenderWindow> render_window = vtkSmartPointer<vtkRenderWindow>::New();
render_window->SetWindowName("Texture");
render_window->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> render_window_interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
render_window_interactor->SetRenderWindow(render_window);
render_window_interactor->Initialize();
vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
render_window_interactor->SetInteractorStyle(style);
render_window->Render();
render_window_interactor->Start();
return EXIT_SUCCESS;
}