[vtkusers] Textures

André Rohde Rohy at gmx.de
Mon Nov 30 19:35:55 EST 2009


This is a good idea. But how does this work for a cube? How is it possible
to add an Actor/Texture to each side of the cube? Do you have a code
example?

Andy

 

 

Von: Wes Turner [mailto:wes.turner at kitware.com] 
Gesendet: Dienstag, 24. November 2009 23:02
An: André Rohde
Cc: vtkusers at vtk.org
Betreff: Re: [vtkusers] Textures

 

I believe that there is a limit of one texture per vtkActor, which gives you
two alternatives.  Either you need to combine your 6 views into a single
texture or you need to make each side of the cube a separate actor.

 

- Wes

2009/11/24 "André Rohde" <Rohy at gmx.de>

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
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the VTK FAQ at:
http://www.vtk.org/Wiki/VTK_FAQ

Follow this link to subscribe/unsubscribe:
http://www.vtk.org/mailman/listinfo/vtkusers




-- 
Wesley D. Turner, Ph.D.
Kitware, Inc.
Technical Leader
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-881-4920

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20091201/a3da8e45/attachment.htm>


More information about the vtkusers mailing list