Appears to be recognize textures based effects only, not phong parameterized effects.
/usr/local/env/graphics/meshlab/vcglib/wrap/dae/util_dae.h:
090 class UtilDAE
091 {
...
569 struct WedgeAttribute
570 {
571 QDomNode wnsrc; // input/sematic/NORMAL
572 QStringList wn;
573 int offnm;
574
575 QDomNode wtsrc; // input/semantic/TEXCOORD
576 QStringList wt;
577 int stride;
578 int offtx;
579
580 QDomNode wcsrc; // input/semantic/COLOR
581 QStringList wc;
582 int offcl;
583 };
584 };
g4pb:wrap blyth$ find . -name '*.h' -exec grep -H WedgeAttribute {} \;
./dae/util_dae.h: void usePerWedgeAttributes(PERWEDGEATTRIBUTETYPE att,const unsigned int multitexture = 1,const unsigned int multicolor = 1)
./dae/util_dae.h: struct WedgeAttribute
./io_trimesh/import_dae.h: static void FindStandardWedgeAttributes(WedgeAttribute& wed,const QDomNode nd,const QDomDocument doc)
./io_trimesh/import_dae.h: WedgeAttribute wa;
./io_trimesh/import_dae.h: FindStandardWedgeAttributes(wa,polylist.at(tript),*(info.doc));
./io_trimesh/import_dae.h: WedgeAttribute wa;
./io_trimesh/import_dae.h: FindStandardWedgeAttributes(wa,polylist.at(pl),*(info.doc));
./io_trimesh/import_dae.h: WedgeAttribute wa;
./io_trimesh/import_dae.h: FindStandardWedgeAttributes(wa,triNodeList.at(tript),*(info.doc));
g4pb:wrap blyth$
142 static void FindStandardWedgeAttributes(WedgeAttribute& wed,const QDomNode nd,const QDomDocument doc)
143 {
144 wed.wnsrc = findNodeBySpecificAttributeValue(nd,"input","semantic","NORMAL");
145 wed.offnm = findStringListAttribute(wed.wn,wed.wnsrc,nd,doc,"NORMAL");
146
147 wed.wtsrc = findNodeBySpecificAttributeValue(nd,"input","semantic","TEXCOORD");
148 if (!wed.wtsrc.isNull())
149 {
150 QDomNode src = attributeSourcePerSimplex(nd,doc,"TEXCOORD");
151 if (isThereTag(src,"accessor"))
152 {
153 QDomNodeList wedatts = src.toElement().elementsByTagName("accessor");
154 wed.stride = wedatts.at(0).toElement().attribute("stride").toInt();
155 }
156 else
157 wed.stride = 2;
158 }
159 else
160 wed.stride = 2;
161
162 wed.offtx = findStringListAttribute(wed.wt,wed.wtsrc,nd,doc,"TEXCOORD"); // fills wed.wt
163
164 wed.wcsrc = findNodeBySpecificAttributeValue(nd,"input","semantic","COLOR");
165 wed.offcl = findStringListAttribute(wed.wc,wed.wcsrc,nd,doc,"COLOR"); // fill wed.wc
166 }
482 inline static int findStringListAttribute(QStringList& list,const QDomNode node,const QDomNode poly,const QDomDocument startpoint,const char* token)
483 {
484 int offset = 0;
485 if (!node.isNull())
486 {
487 offset = node.toElement().attribute("offset").toInt();
488 QDomNode st = attributeSourcePerSimplex(poly,startpoint,token); // lookup input elem with matched token (semantic) use the source reference to access the data
489 valueStringList(list,st,"float_array");
490 }
491 return offset;
492 }
493
494
173 static DAEError LoadPolygonalListMesh(QDomNodeList& polylist,ColladaMesh& m,const size_t offset,InfoDAE& info,QMap<QString,QString> &materialBinding)
174 {
175 if(polylist.isEmpty()) return E_NOERROR;
176 QDEBUG("****** LoadPolygonalListMesh (initial mesh size %i %i)",m.vert.size(),m.fn);
177 for(int tript = 0; tript < polylist.size();++tript)
178 {
...
218 WedgeAttribute wa;
219 FindStandardWedgeAttributes(wa,polylist.at(tript),*(info.doc));
220 QDEBUG("******* Start Reading faces. Attributes Offsets: offtx %i - offnm %i - offcl %i",wa.offtx,wa.offnm,wa.offcl);
221
222 int faceIndexCnt=0;
223 int jj = 0;
224 for(int ff = 0; ff < (int) faceSizeList.size();++ff) // for each polygon
/// from "vcount" eg 3 3 3 3 3 4 4 4 4 4
225 {
226 int curFaceVertNum = faceSizeList.at(ff).toInt();
227
228 MyPolygon<typename ColladaMesh::VertexType> polyTemp(curFaceVertNum);
229 for(int tt = 0;tt < curFaceVertNum ;++tt) // for each vertex of the polygon
230 {
231 int indvt = faceIndexList.at(faceIndexCnt).toInt();
/// from "p"
232 if(faceSizeList.size()<100) QDEBUG("******* Reading face[%3i].V(%i) = %4i (%i-th of the index list) (face has %i vertices)",ff,tt,indvt,faceIndexCnt,curFaceVertNum);
233 assert(indvt + offset < m.vert.size());
234 polyTemp._pv[tt] = &(m.vert[indvt + offset]);
235 faceIndexCnt +=faceAttributeNum;
236
237 WedgeTextureAttribute(polyTemp._txc[tt],faceIndexList,ind_txt, wa.wt ,wa.wtsrc, jj + wa.offtx,wa.stride);
///
/// associates a vertex, with texture index
/// jj + wa.offtx ==> faceind points to indtx from faceIndexList
///
/// giving association with texture
/// U(), V() coordinates within the image
/// N() image number
///
///
249
250 jj += faceAttributeNum;
251 }
252
253 AddPolygonToMesh(polyTemp,m);
254 }
255 }
110 // this one is used for the polylist nodes
111 static int WedgeTextureAttribute(typename ColladaMesh::FaceType::TexCoordType & WT, const QStringList faceIndexList, int ind_txt, const QStringList wt, const QDomNode wtsrc,const int faceind,const int stride = 2)
112 {
113 int indtx = -1;
114 if (!wtsrc.isNull())
115 {
116 indtx = faceIndexList.at(faceind).toInt();
117 //int num = wt.size();
118 assert(indtx * stride < wt.size());
119 WT = vcg::TexCoord2<float>();
120 WT.U() = wt.at(indtx * stride).toFloat();
121 WT.V() = wt.at(indtx * stride + 1).toFloat();
122 WT.N() = ind_txt;
123 }
124 return indtx;
125 }
Untextured Polylist:
127 <polylist count="30" material="WHITE">
128 <input offset="0" semantic="VERTEX" source="#near_hall_top_dwarf0xbbd1a68-Vtx" />
129 <input offset="1" semantic="NORMAL" source="#near_hall_top_dwarf0xbbd1a68-Norm" />
130 <vcount>4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
131 <p>0 0
3 0
2 0
1 0
6 1
5 1
1 1
2 1
5 2 4 2 0 2 1 2 4 3 5 3 6 3 7 3 11 4 13 4 10 4 8 4 13 5 12 5 9 5 10 5 15 6 14 6 3 6 4 7 7 7 17 7 15 8 3 8 0 8 4 9 17 9 16 9 16 10 15 10 0 10 0 11 4 11 16 11 19 12 17 12 7 12 7 13 6 13 2 13 3 14 14 14 18 14 19 15 7 15 2 15 2 16 3 16 18 16 18 17 19 17 2 17 14 18 15 18 8 18 9 19 18 19 14 19 14 20 8 20 10 20 10 21 9 21 14 21 19 22 18 22 9 22 9 23 12 23 19 23 15 24 16 24 11 24 11 25 8 25 15 25 17 26 19 26 12 26 13 27 11 27 16 27 17 28 12 28 13 28 13 29 16 29 17 29
</p>
132 </polylist>
<input semantic="TEXCOORD" source="#rectangle_object-mesh-map-channel1" offset="2" set="1"/>
One texture image per material (only ~30 materials) leads to meshlab loading 4522 texture images and being unusably slow.:
LOG: 0 Loading textures
LOG: 0 Texture[ 4515 ] = './textures/OpaqueVacuum.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4516 ] = './textures/Pyrex.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4517 ] = './textures/Bialkali.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4518 ] = './textures/OpaqueVacuum.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4519 ] = './textures/Pyrex.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4520 ] = './textures/Bialkali.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4521 ] = './textures/OpaqueVacuum.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )
LOG: 0 Loading textures
LOG: 0 Texture[ 4522 ] = './textures/RadRock.png' ( 100 x 100 ) -> ( 128 x 128 )
will be loaded as GL texture id 0 ( 128 x 128 )