Hi, all,<br><br>I want to use texture mapping in VTK, but I do not know how to. Particularly, I have one mesh (actually a 2D mesh manually picked on the texture image) and one texture image. And I want to specify the color of each vertex of the mesh by giving its 2D color index (u,v) on the texture image. I tried setting the 2D texture index as 2-component scalars (not normalized to 0~1, should I do that?) of the mesh&#39;s point data, but it does not work. Can any body give me some advices on? Any suggestion will be appreciated.
<br><br>Thanks in advance,<br>----<br>Ye Ning<br><br>Attached here my &quot;NOT-working&quot; code:<br><br>#include &lt;fstream&gt;<br>#include &lt;iostream&gt;<br><br>#include &quot;vtkActor.h&quot;<br>#include &quot;vtkCamera.h
&quot;<br>#include &quot;vtkPolyData.h&quot;<br>#include &quot;vtkPolyDataMapper.h&quot;<br>#include &quot;vtkRenderWindow.h&quot;<br>#include &quot;vtkRenderWindowInteractor.h&quot;<br>#include &quot;vtkRenderer.h&quot;<br>
#include &quot;vtkPoints.h&quot;<br>#include &quot;vtkPointData.h&quot;<br>#include &quot;vtkCellArray.h&quot;<br><br>#include &quot;vtkDoubleArray.h&quot;<br>#include &quot;vtkJPEGReader.h&quot;<br>#include &quot;vtkTexture.h
&quot;<br><br>#define MeshPts 64<br>#define MeshTri 111<br><br>const char* ptsfile = &quot;facemesh.pts&quot;;<br>const char* trifile = &quot;facemesh.tri&quot;;<br>const char* texfile = &quot;facemesh.jpg&quot;;<br><br>void LoadShape( vtkPolyData* avatar )
<br>{<br>&nbsp;&nbsp;&nbsp; if (!avatar) return;<br><br>&nbsp;&nbsp;&nbsp; vtkPoints* pts = vtkPoints::New();<br>&nbsp;&nbsp;&nbsp; vtkCellArray* tri = vtkCellArray::New();<br>&nbsp;&nbsp;&nbsp; vtkDoubleArray* scalar = vtkDoubleArray::New();<br>&nbsp;&nbsp;&nbsp; scalar-&gt;SetNumberOfComponents(2);
<br><br>&nbsp;&nbsp;&nbsp; ifstream fin;<br>&nbsp;&nbsp;&nbsp; fin.open( ptsfile );<br>&nbsp;&nbsp;&nbsp; for ( int i = 0; i &lt; MeshPts; i++ ) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double x,y;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fin &gt;&gt; x; fin &gt;&gt; y;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; pts-&gt;InsertNextPoint( x, -y, 0 );<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; scalar-&gt;InsertTuple2( i, x, y );
<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; fin.close();<br>&nbsp;&nbsp;&nbsp; fin.open( trifile );<br>&nbsp;&nbsp;&nbsp; vtkIdType ptslist[3];<br>&nbsp;&nbsp;&nbsp; for ( int i = 0; i &lt; MeshTri; i++ ) {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; double t;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fin &gt;&gt; t; ptslist[0] = vtkIdType(t);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fin &gt;&gt; t; ptslist[1] = vtkIdType(t);
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fin &gt;&gt; t; ptslist[2] = vtkIdType(t);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; tri-&gt;InsertNextCell( 3, ptslist );<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; fin.close();<br><br>&nbsp;&nbsp;&nbsp; avatar-&gt;SetPoints( pts );<br>&nbsp;&nbsp;&nbsp; avatar-&gt;SetPolys( tri );<br>&nbsp;&nbsp;&nbsp; avatar-&gt;GetPointData()-&gt;SetScalars( scalar );
<br><br>&nbsp;&nbsp;&nbsp; scalar-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; tri-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; pts-&gt;Delete();<br>}<br><br>void LoadTexture( vtkTexture* texture )<br>{<br>&nbsp;&nbsp;&nbsp; vtkJPEGReader* textureReader = vtkJPEGReader::New();<br>&nbsp;&nbsp;&nbsp; textureReader-&gt;SetFileName( texfile );
<br><br>&nbsp;&nbsp;&nbsp; texture-&gt;SetInputConnection( textureReader-&gt;GetOutputPort() );<br>&nbsp;&nbsp;&nbsp; texture-&gt;RepeatOff();<br>&nbsp;&nbsp;&nbsp; texture-&gt;InterpolateOn();<br><br>&nbsp;&nbsp;&nbsp; textureReader-&gt;Delete();<br>}<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; /* + Texture */
<br>&nbsp;&nbsp;&nbsp; vtkTexture* texture = vtkTexture::New();<br>&nbsp;&nbsp;&nbsp; LoadTexture( texture );<br>&nbsp;&nbsp;&nbsp; /* o-&gt;Poly data source */<br>&nbsp;&nbsp;&nbsp; vtkPolyData* avatar = vtkPolyData::New();<br>&nbsp;&nbsp;&nbsp; LoadShape( avatar );<br>&nbsp;&nbsp;&nbsp; /* --&gt;Mapper */<br>
&nbsp;&nbsp;&nbsp; vtkPolyDataMapper* avaMapper = vtkPolyDataMapper::New();<br>&nbsp;&nbsp;&nbsp; avaMapper-&gt;SetInput( avatar );<br>&nbsp;&nbsp;&nbsp; /* --&gt;Actor */<br>&nbsp;&nbsp;&nbsp; vtkActor* avaActor = vtkActor::New();<br>&nbsp;&nbsp;&nbsp; avaActor-&gt;SetMapper( avaMapper );<br>&nbsp;&nbsp;&nbsp; avaActor-&gt;SetTexture( texture );
<br>&nbsp;&nbsp;&nbsp; /* --&gt;Renderer */<br>&nbsp;&nbsp;&nbsp; vtkRenderer* renderer = vtkRenderer::New();<br>&nbsp;&nbsp;&nbsp; renderer-&gt;AddActor( avaActor );<br>&nbsp;&nbsp;&nbsp; renderer-&gt;SetBackground(1,1,1);<br>&nbsp;&nbsp;&nbsp; /* --&gt;Render Window */<br>&nbsp;&nbsp;&nbsp; vtkRenderWindow* renWin = vtkRenderWindow::New();
<br>&nbsp;&nbsp;&nbsp; renWin-&gt;AddRenderer( renderer );<br>&nbsp;&nbsp;&nbsp; /* + Interactor */<br>&nbsp;&nbsp;&nbsp; vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();<br>&nbsp;&nbsp;&nbsp; iren-&gt;SetRenderWindow( renWin );<br>&nbsp;&nbsp;&nbsp; /* Rendering and interacting */
<br>&nbsp;&nbsp;&nbsp; renWin-&gt;Render();<br>&nbsp;&nbsp;&nbsp; iren-&gt;Start();<br>&nbsp;&nbsp;&nbsp; /* Release all */<br>&nbsp;&nbsp;&nbsp; iren-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; renWin-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; renderer-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; avaActor-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; avaMapper-&gt;Delete();
<br>&nbsp;&nbsp;&nbsp; avatar-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; texture-&gt;Delete();<br>}<br><br>