[vtkusers] Texturing a surface triangle - how to?
    Tron Darvann 
    tdarvann at lab3d.odont.ku.dk
       
    Mon May  2 04:59:04 EDT 2005
    
    
  
Dear VTK-users,
Does anybody know how to accomplish the following:
I have 
1) a triangle defined as 3 points,
2) And I have a texture (a 2D image), and finally I have
3) the texture coordinates for 3 positions in the texture.
How do I paste my triangular patch of the image as a 2D texture
onto my triangle?
The simple example in TPlane_test.tcl pastes a texture onto a
vtkPlaneSource, but in that example the texture coordinates
are created by the vtkPlaneSource.  In my case the texture
coordinates are read from file and inserted e.g. into a 
vtkFloatArray (is that the way to do it?)  [I am aware of the
possibillites for creating texture coordinates through
vtkTextureMapToPlane, vtkTextureMapToSphere and vtkTextureMapToCylinder
and manipulation through vtkTransformTextureCoords, BUT since I
already have my coordinates explicitly defined, I do not need
these classes...]
(Eventually, when I know how to paste texture on a
single triangle, I can go on to texture all the triangles
in a surface scan of an object.)
Thanks for any suggestions.
Tron Darvann
Here some code to get the idea of what I'm trying to do:
# This script (modified from CreateStrip.tcl) 
# shows how to manually create a vtkPolyData with a
# triangle.  Then we paste a texture onto it using 
# three texture coordinates in an image...?
package require vtk
package require vtkinteraction
# First we'll create some points.
#
vtkPoints points
    points InsertPoint 0 0.0 0.0 0.0
    points InsertPoint 1 0.0 1.0 0.0
    points InsertPoint 2 1.0 0.0 0.0
 vtkCellArray strips
    strips InsertNextCell 3;#number of points
    strips InsertCellPoint 0
    strips InsertCellPoint 1
    strips InsertCellPoint 2
 vtkPolyData profile
    profile SetPoints points
    profile SetStrips strips
 vtkPolyDataMapper map
    map SetInput profile
vtkBMPReader bmpReader
  bmpReader SetFileName "C:/tron/projects/3dMD/export/050406092854.bmp"
vtkTexture atext
  atext SetInput [bmpReader GetOutput]
  atext InterpolateOn
vtkActor triangle
    triangle SetMapper map
    triangle SetTexture atext
# Explicitly specify texture coordinates: a triangular patch in the input texture.
vtkFloatArray texcoord
  texcoord SetNumberOfComponents 2
  texcoord SetNumberOfTuples 3
  texcoord SetTuple2 0 0.2348 0.7891
  texcoord SetTuple2 1 0.2454 0.7830
  texcoord SetTuple2 2 0.2128 0.7790
###### HERE MISSING CODE: TO APPLY THE TEXTURE COORDINATES !!!####
    
# Create the usual rendering stuff.
vtkRenderer ren1
vtkRenderWindow renWin
    renWin AddRenderer ren1
vtkRenderWindowInteractor iren
    iren SetRenderWindow renWin
# Add the actors to the renderer, set the background and size
#
ren1 AddActor triangle
ren1 SetBackground 1 1 1
renWin SetSize 250 250
renWin Render
# render the image
#
iren AddObserver UserEvent {wm deiconify .vtkInteract}
# prevent the tk window from showing up then start the event loop
wm withdraw .
    
    
More information about the vtkusers
mailing list