function texturedVRML2(outputFname,vertex, face, textureUV, textureImageFile)
%{
  outputFname is the file name for VRML2 file. usualy it is *.wrl
      when it is done, open the file in meshlab
  vertex is 3xN points
  face is KxM faces (index for faces with K vertices and M face in total. 
        K=3 for triangulated mesh. K=4 for rectangular mesh.)
  textureUV is KxMx2 uv coordinates for each vertice of the faces
        (all values should be from 0 to 1)
  texture coordinate system

  V (0,1)      (1,1)
  ^
  |
  |
  |
  +--------> U (1,0)
 (0,0)

  more document: http://www.c3.hu/cryptogram/vrmltut/part6.html
%}

fp = fopen(outputFname,'w');
fprintf(fp,'#VRML V2.0 utf8\n');
fprintf(fp,'Shape{ geometry IndexedFaceSet{\n');
fprintf(fp,'coord Coordinate{point[\n');
for i=1:size(vertex,2)
    fprintf(fp,'%f %f %f,\n',vertex(1,i),vertex(2,i),vertex(3,i));
end
fprintf(fp,']}\n');
fprintf(fp,'coordIndex[\n');
for i=1:size(face,2)
    for j=1:size(face,1)
        fprintf(fp,'%d,',face(j,i));
    end
    fprintf(fp,'-1,\n');
end
fprintf(fp,']\n');
fprintf(fp,'texCoord TextureCoordinate{point[\n');
for i=1:size(textureUV,2)
    for j=1:size(textureUV,1)
        fprintf(fp,'%f %f\n',textureUV(j,i,1),textureUV(j,i,2));
    end
end
fprintf(fp,']}\n');
fprintf(fp,'texCoordIndex[\n');
cnt =0;
for i=1:size(textureUV,2)
    for j=1:size(textureUV,1)
        fprintf(fp,'%d ',cnt);
        cnt=cnt+1;
    end
    fprintf(fp,'-1\n');
end
fprintf(fp,']\n');
fprintf(fp,'}\n');
fprintf(fp,'appearance Appearance{material Material{diffuseColor 1 1 1 }  texture ImageTexture { url "%s" } }\n',textureImageFile);
fprintf(fp,'}\n');
fclose(fp);
end