#include <vtkVersion.h>
#include <vtkActor.h>
#include <vtkCamera.h>
#include <vtkImageActor.h>
#include <vtkImageData.h>
#include <vtkJPEGReader.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSmartPointer.h>
#include <vtkTexture.h>
static void CreateColorImage(vtkImageData*);
int main(int argc, char *argv[])
{
vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New();
CreateColorImage(image);
// Create a mapper and actor
vtkSmartPointer<vtkTexture> texture = vtkSmartPointer<vtkTexture>::New();
#if VTK_MAJOR_VERSION <= 5
texture->SetInputConnection(image->GetProducerPort());
#else
texture->SetInputData(image);
#endif
//texture->Update(); // Do not call this. It seems to work anyway, but it produces an error as well: vtkOpenGLTexture (0x8ffbe28): Definition of Execute() method should be in subclass and you should really use the ExecuteData(vtkInformation *request,...) signature instead
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->SetBackgroundTexture(texture);
renderer->TexturedBackgroundOn();
vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor = vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
renderWindow->Render();
renderWindowInteractor->Start();
return EXIT_SUCCESS;
}
void CreateColorImage(vtkImageData* image)
{
unsigned int dim = 20;
image->SetDimensions(dim, dim, 1);
#if VTK_MAJOR_VERSION <= 5
image->SetNumberOfScalarComponents(3);
image->SetScalarTypeToUnsignedChar();
image->AllocateScalars();
#else
image->AllocateScalars(VTK_UNSIGNED_CHAR,3);
#endif
for(unsigned int x = 0; x < dim; x++)
{
for(unsigned int y = 0; y < dim; y++)
{
unsigned char* pixel = static_cast<unsigned char*>(image->GetScalarPointer(x,y,0));
if(x < dim/2)
{
pixel[0] = 255;
}
else
{
pixel[0] = 0;
}
pixel[1] = 0;
pixel[2] = 255;
}
}
image->Modified();
}