[vtk-developers] per-face tcoords problem (vtkOBJReader, vtkVRMLImporter)

Will Schroeder will.schroeder at kitware.com
Tue Jul 8 13:11:32 EDT 2003


Hi Tim-

I think it might be possible to stick the tcoords into a data array 
associated with the cells. Then the mappers would have to be modified to 
support tcoords per cell (using the data array). It would require some work 
but I suspect it could be done without too much trouble.

Please pardon a dumb question: you want---for every face--a tcoord per each 
vertex of the face. As long as the number of verts per face is constant 
(e.g.., all triangles) this would be easy to represent as a 6-tuple in a 
data array (r,s, r,s, r,s) corresponding to each triangle.

Will

At 12:02 PM 7/8/2003 +0100, Tim Hutton wrote:
>Hello VTK developers,
>
>The issue of per-face texture coordinates has cropped-up for me again. 
>Both the OBJ and VRML formats support this but vtkOBJReader and 
>vtkVRMLImporter do not, and in fact cause eventual access violations if 
>you try to use them to read certain files.
>
>I have a workaround (below) and was wondering if anybody has any 
>experience with this, or any tips on how I can change vtkOBJReader and 
>vtkVRMLImporter to cope with this situation?
>
>File contains:
>
>A: vertices  (eg. 2728 3D points)
>B: polys  (eg. 5342 int-triplets, indexed into A)
>C: tcoords  (eg. 3078 2D points)
>D: tcoord polys  (eg. 5342 int-triplets, indexed into C)
>
>Always, n(D)==n(B) since these correspond.
>
>My workaround is to construct a new points structure, E and do this: 
>(pseudo-code)
>
>E->SetNumberOfPoints( n(C) );
>
>for( i=0; i<n(D); i++ ) {
>   for( j=0; j<3; j++ ) {
>     E[ D[i][j] ] = A[ B[i][j] ]; // copy point from A into E
>   }
>}
>
>the final polydata has:
>
>poly->SetPoints(E);
>poly->SetPolys(D);
>poly->GetPointData()->SetTCoords(C);
>
>One drawback of this method is that by duplicating vertices we have split 
>the mesh, which means normals cannot correctly be computed. (If you merge 
>the mesh before computing the normals then the texture no longer maps 
>correctly.)
>
>An added complication is when some polys do not have any tcoords at all, 
>leaving n(D)!=n(B). But this is even trickier, since VTK cannot cope with 
>partially-textured surfaces I think. Maybe these polys could be added to a 
>separate vtkPolyData.
>
>I'm loathe to make changes until I'm sure what the right thing to do is, 
>so I'm looking for guidance! Is there a way to get VTK to use per-face 
>tcoords "naturally"?
>
>Thanks,
>
>Tim.
>
>---------------------------------------------------------------------------
>Tim Hutton,                        http://www.eastman.ucl.ac.uk/~dmi/MINORI
>Research Fellow & PhD student,                   T.Hutton at eastman.ucl.ac.uk
>MINORI Project, Biomedical Informatics Unit,
>Eastman Dental Institute, UCL,                   Tel: [+44] (0)20 7915 2344
>256 Gray's Inn Road, London WC1X 8LD, UK         Fax: on request
>---------------------------------------------------------------------------
>This email represents the views of the sender alone and must not be 
>construed as representing the views of the Eastman Dental Institute. It 
>may contain confidential information and may be protected by law as a 
>legally privileged document and copyright work. Its content should not be 
>disclosed and it should not be given or copied to anyone other than the 
>person(s) named or referenced above. If you have received this email in 
>error, please contact the sender.
>
>
>_______________________________________________
>vtk-developers mailing list
>vtk-developers at vtk.org
>http://www.vtk.org/mailman/listinfo/vtk-developers






More information about the vtk-developers mailing list