[vtkusers] Textures

"André Rohde" Rohy at gmx.de
Tue Nov 24 15:49:11 EST 2009


Dear Vtk Users,
i´d like to map one texture to each side of a cube (6 sides = 6 different textures) from different arrays. (Only one Array in my Code yet)
Mapping one texture to the cube works fine for me. But i don´t have an idea how this is gonna work for each side of a cube. The general idea behind my program is to take an specific amount of snapshots from a camera and generate an array/cube of this pictures in vtk. 

Here´s my Code:

//First Array > Image Data should be mapped to the first side of the cube...
vtkFloatArray *vtkArray = vtkFloatArray::New();
vtkArray->SetNumberOfComponents(1);
vtkArray->SetNumberOfTuples(1392*1040);
	
unsigned indexInverted = 0;
	
for(int k = 0; k < 1040; k++)
{
 for(int l = 0; l < 1392; l++)
 {
 //pcFrame contains the ImageData from the Camera
 vtkArray->SetTuple1(indexInverted,pcFrame[((1392*1040)-(1392*(k+1)))+l]);
 indexInverted++;
 }
}
	
vtkImageData *myImage = vtkImageData::New();
myImage->SetDimensions(1392,1040,1);
myImage->SetSpacing(1,1,1);
myImage->SetOrigin(0,0,0);
myImage->SetNumberOfScalarComponents(1);
myImage->SetScalarTypeToFloat();
myImage->AllocateScalars();
myImage->GetPointData()->SetScalars(vtkArray);

int i;
//Cube Coordinates
static float x[8][3]={{0,0,0}, {1392,0,0}, {1392,1040,0}, {0,1040,0},	{0,0,700}, {1392,0,700}, {1392,1040,700}, {0,1040,700}};

static vtkIdType pts[6][4]={{0,1,2,3},{4,5,6,7}, {0,1,5,4},{1,2,6,5}, {2,3,7,6}, {3,0,4,7}};
  
// Color LookupTable
vtkLookupTable *table = vtkLookupTable::New();
table->SetTableRange(0,255);
table->SetValueRange(0.0,1.0);
table->SetSaturationRange(0.0,0.0);
table->SetHueRange(0.0,0.0);
table->SetAlphaRange(1.0,1.0);
table->SetNumberOfColors(256);
table->Build();


// Create texture
vtkTexture *atext = vtkTexture::New();
atext->SetInput(myImage);
atext->SetLookupTable(table);
atext->InterpolateOff();

// We'll create the building blocks of polydata including data attributes.
vtkPolyData *cube = vtkPolyData::New();
vtkPoints *points = vtkPoints::New();
vtkCellArray *polys = vtkCellArray::New();
vtkFloatArray *tCoords = vtkFloatArray::New();

tCoords->SetNumberOfComponents(2);
tCoords->InsertTuple2(0, 0, 0);
tCoords->InsertTuple2(1, 1, 0);
tCoords->InsertTuple2(2, 1, 1);
tCoords->InsertTuple2(3, 0, 1);
tCoords->InsertTuple2(4, 0, 0);
tCoords->InsertTuple2(5, 1, 0);
tCoords->InsertTuple2(6, 1, 1);
tCoords->InsertTuple2(7, 0, 1);

// Load the point, cell, and data attributes.
for (i=0; i<8; i++) points->InsertPoint(i,x[i]);
for (i=0; i<6; i++) polys->InsertNextCell(4,pts[i]);

// We now assign the pieces to the vtkPolyData.
cube->SetPoints(points);
points->Delete();
cube->SetPolys(polys);
polys->Delete();
cube->GetPointData()->SetTCoords(tCoords);
tCoords->Delete();

 
vtkPolyDataMapper *cubeMapper = vtkPolyDataMapper::New();
cubeMapper->SetInput(cube);
vtkActor *cubeActor = vtkActor::New();
cubeActor->SetMapper(cubeMapper);
cubeActor->SetTexture(atext);

// The usual rendering stuff.
vtkCamera *camera = vtkCamera::New();
camera->SetPosition(1,1,1);
camera->SetFocalPoint(0,0,0);

vtkRenderer *renderer = vtkRenderer::New();
vtkRenderWindow *renWin = vtkRenderWindow::New();
renWin->AddRenderer(renderer);

vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
vtkWidget->SetRenderWindow(renWin);

renderer->AddActor(cubeActor);
renderer->SetActiveCamera(camera);
renderer->ResetCamera();
renderer->SetBackground(0.4,0.5,0.6);  

//interact with data
renWin->Render();
iren->Start();

with kind regards
Andy
-- 
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01



More information about the vtkusers mailing list