2016-10-28 3 views
0

Ich verwende VTK auf Visual Studio 2010, ich möchte ein Bild auf die Würfelflächen anwenden.Anwenden eines Bildes auf Würfelflächen - VTK

-Code mein Bild zu lesen:

// Read JPG image 
vtkSmartPointer<vtkJPEGReader> JPEGReader = vtkSmartPointer<vtkJPEGReader>::New(); 
JPEGReader->SetFileName(argv[1]); 
JPEGReader->Update(); 

// Image actor 
vtkSmartPointer<vtkImageActor> imageActor = vtkSmartPointer<vtkImageActor>::New(); 
imageActor->GetMapper()->SetInputData(JPEGReader->GetOutput()); 

Setup-cube-Code:

// Setup cube 
vtkSmartPointer<vtkCubeSource> cubeSource = vtkSmartPointer<vtkCubeSource>::New(); 
cubeSource->Update(); 
vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); 
cubeMapper->SetInputConnection(cubeSource->GetOutputPort()); 
vtkSmartPointer<vtkActor> cubeActor = vtkSmartPointer<vtkActor>::New(); 
cubeActor->SetMapper(cubeMapper); 
cubeActor->GetProperty()->SetDiffuseColor(.3, .6, .4); 

Wie ich das tun?

Antwort

1

Sie müssen eine Textur und eine Textur verwenden, um zu erreichen, was Sie wollen. Ich habe ein kleines Beispiel aus this angepasst (obwohl in Python), das Ihnen mit einem Startpunkt helfen kann. In diesem Fall ist nicht ideal, da es nur 2 Seiten des Würfels abdeckt (siehe Abbildung unten). Ich denke jedoch, vtkTextureMapToBox, wie in this Link, sollte in der Lage sein, den Trick zu tun (ich konnte es nicht verwenden, weil ich VTK 5.8 verwende).

Code:

import vtk 

# Create a render window 
ren = vtk.vtkRenderer() 
renWin = vtk.vtkRenderWindow() 
renWin.AddRenderer(ren) 
renWin.SetSize(480,480) 
iren = vtk.vtkRenderWindowInteractor() 
iren.SetRenderWindow(renWin) 

# Generate a cube 
cube = vtk.vtkCubeSource() 

# Read the image data from a file 
reader = vtk.vtkJPEGReader() 
reader.SetFileName("yourimage.jpg") 

# Create texture object 
texture = vtk.vtkTexture() 
texture.SetInputConnection(reader.GetOutputPort()) 

#Map texture coordinates 
map_to_plane = vtk.vtkTextureMapToPlane() 
map_to_plane.SetInputConnection(cube.GetOutputPort()) 

# Create mapper and set the mapped texture as input 
mapper = vtk.vtkPolyDataMapper() 
mapper.SetInputConnection(map_to_plane.GetOutputPort()) 

# Create actor and set the mapper and the texture 
actor = vtk.vtkActor() 
actor.SetMapper(mapper) 
actor.SetTexture(texture) 

ren.AddActor(actor) 

iren.Initialize() 
renWin.Render() 
iren.Start() 

Ergebnis:

enter image description here