Corrected bug in texture saving (vt vs wt clash)
It does not worked when trying to save per vert tex in a mesh with also per-wedge.
This commit is contained in:
parent
ce1f23a37b
commit
524f8e8a61
wrap/io_trimesh
|
@ -105,7 +105,7 @@ namespace vcg {
|
||||||
const int DGTVQ = vcg::tri::io::Precision<typename VertexType::QualityType>::digits();
|
const int DGTVQ = vcg::tri::io::Precision<typename VertexType::QualityType>::digits();
|
||||||
const int DGTVR = vcg::tri::io::Precision<typename VertexType::RadiusType>::digits();
|
const int DGTVR = vcg::tri::io::Precision<typename VertexType::RadiusType>::digits();
|
||||||
const int DGTFQ = vcg::tri::io::Precision<typename FaceType::QualityType>::digits();
|
const int DGTFQ = vcg::tri::io::Precision<typename FaceType::QualityType>::digits();
|
||||||
bool multit = false;
|
bool saveTexIndexFlag = false;
|
||||||
|
|
||||||
if(binary) h=hbin;
|
if(binary) h=hbin;
|
||||||
else h=hasc;
|
else h=hasc;
|
||||||
|
@ -129,7 +129,7 @@ namespace vcg {
|
||||||
for(size_t i=0; i < m.textures.size(); ++i)
|
for(size_t i=0; i < m.textures.size(); ++i)
|
||||||
fprintf(fpout,"comment %s %s\n", TFILE, (const char *)(m.textures[i].c_str()) );
|
fprintf(fpout,"comment %s %s\n", TFILE, (const char *)(m.textures[i].c_str()) );
|
||||||
|
|
||||||
if(m.textures.size()>1 && (HasPerWedgeTexCoord(m) || HasPerVertexTexCoord(m))) multit = true;
|
if(m.textures.size()>1 && (HasPerWedgeTexCoord(m) || HasPerVertexTexCoord(m))) saveTexIndexFlag = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((pi.mask & Mask::IOM_CAMERA))
|
if((pi.mask & Mask::IOM_CAMERA))
|
||||||
|
@ -225,18 +225,22 @@ namespace vcg {
|
||||||
"property int flags\n"
|
"property int flags\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Note that you can save VT as WT if you really want it...
|
|
||||||
if( (HasPerWedgeTexCoord(m) || HasPerVertexTexCoord(m) ) && pi.mask & Mask::IOM_WEDGTEXCOORD )
|
if( (HasPerWedgeTexCoord(m) && pi.mask & Mask::IOM_WEDGTEXCOORD ) ||
|
||||||
|
(HasPerVertexTexCoord(m) && (!HasPerWedgeTexCoord(m)) && pi.mask & Mask::IOM_WEDGTEXCOORD ) ) // Note that you can save VT as WT if you really really want it...
|
||||||
{
|
{
|
||||||
fprintf(fpout,
|
fprintf(fpout,
|
||||||
"property list uchar float texcoord\n"
|
"property list uchar float texcoord\n"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
// The per-face texture index information has to be saved (if necessary) both for PerVert and PerWedg
|
// The texture index information has to be saved for each face (if necessary) both for PerVert and PerWedg
|
||||||
if( ( HasPerWedgeTexCoord(m) || HasPerVertexTexCoord(m) ) &&
|
if( saveTexIndexFlag &&
|
||||||
( (pi.mask & Mask::IOM_WEDGTEXCOORD) || (pi.mask & Mask::IOM_VERTTEXCOORD ) ) )
|
( ( HasPerWedgeTexCoord(m) && (pi.mask & Mask::IOM_WEDGTEXCOORD) ) ||
|
||||||
|
( HasPerVertexTexCoord(m) && (pi.mask & Mask::IOM_VERTTEXCOORD) ) ||
|
||||||
|
( HasPerVertexTexCoord(m) && (!HasPerWedgeTexCoord(m)) && (pi.mask & Mask::IOM_WEDGTEXCOORD) )
|
||||||
|
)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
if(multit)
|
|
||||||
fprintf(fpout,
|
fprintf(fpout,
|
||||||
"property int texnumber\n"
|
"property int texnumber\n"
|
||||||
);
|
);
|
||||||
|
@ -535,9 +539,9 @@ namespace vcg {
|
||||||
// this assert triggers when the vn != number of vertexes in vert that are not deleted.
|
// this assert triggers when the vn != number of vertexes in vert that are not deleted.
|
||||||
assert(j==m.vn);
|
assert(j==m.vn);
|
||||||
|
|
||||||
char c = 3;
|
unsigned char b3char = 3;
|
||||||
unsigned char b9 = 9;
|
unsigned char b9char = 9;
|
||||||
unsigned char b6 = 6;
|
unsigned char b6char = 6;
|
||||||
FacePointer fp;
|
FacePointer fp;
|
||||||
int vv[3];
|
int vv[3];
|
||||||
FaceIterator fi;
|
FaceIterator fi;
|
||||||
|
@ -556,15 +560,15 @@ namespace vcg {
|
||||||
vv[0]=indices[fp->cV(0)];
|
vv[0]=indices[fp->cV(0)];
|
||||||
vv[1]=indices[fp->cV(1)];
|
vv[1]=indices[fp->cV(1)];
|
||||||
vv[2]=indices[fp->cV(2)];
|
vv[2]=indices[fp->cV(2)];
|
||||||
fwrite(&c,1,1,fpout);
|
fwrite(&b3char,sizeof(char),1,fpout);
|
||||||
fwrite(vv,sizeof(int),3,fpout);
|
fwrite(vv,sizeof(int),3,fpout);
|
||||||
|
|
||||||
if(HasPerFaceFlags(m)&&( pi.mask & Mask::IOM_FACEFLAGS) )
|
if(HasPerFaceFlags(m)&&( pi.mask & Mask::IOM_FACEFLAGS) )
|
||||||
fwrite(&(fp->Flags()),sizeof(int),1,fpout);
|
fwrite(&(fp->Flags()),sizeof(int),1,fpout);
|
||||||
|
|
||||||
if( HasPerVertexTexCoord(m) && (pi.mask & Mask::IOM_VERTTEXCOORD) )
|
if( HasPerVertexTexCoord(m) && (!HasPerWedgeTexCoord(m)) && (pi.mask & Mask::IOM_WEDGTEXCOORD) ) // Note that you can save VT as WT if you really want it...
|
||||||
{
|
{
|
||||||
fwrite(&b6,sizeof(char),1,fpout);
|
fwrite(&b6char,sizeof(char),1,fpout);
|
||||||
float t[6];
|
float t[6];
|
||||||
for(int k=0;k<3;++k)
|
for(int k=0;k<3;++k)
|
||||||
{
|
{
|
||||||
|
@ -575,7 +579,7 @@ namespace vcg {
|
||||||
}
|
}
|
||||||
else if( HasPerWedgeTexCoord(m) && (pi.mask & Mask::IOM_WEDGTEXCOORD) )
|
else if( HasPerWedgeTexCoord(m) && (pi.mask & Mask::IOM_WEDGTEXCOORD) )
|
||||||
{
|
{
|
||||||
fwrite(&b6,sizeof(char),1,fpout);
|
fwrite(&b6char,sizeof(char),1,fpout);
|
||||||
float t[6];
|
float t[6];
|
||||||
for(int k=0;k<3;++k)
|
for(int k=0;k<3;++k)
|
||||||
{
|
{
|
||||||
|
@ -585,7 +589,7 @@ namespace vcg {
|
||||||
fwrite(t,sizeof(float),6,fpout);
|
fwrite(t,sizeof(float),6,fpout);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(multit)
|
if(saveTexIndexFlag)
|
||||||
{
|
{
|
||||||
int t = fp->WT(0).n();
|
int t = fp->WT(0).n();
|
||||||
fwrite(&t,sizeof(int),1,fpout);
|
fwrite(&t,sizeof(int),1,fpout);
|
||||||
|
@ -597,7 +601,7 @@ namespace vcg {
|
||||||
|
|
||||||
if( HasPerWedgeColor(m) && (pi.mask & Mask::IOM_WEDGCOLOR) )
|
if( HasPerWedgeColor(m) && (pi.mask & Mask::IOM_WEDGCOLOR) )
|
||||||
{
|
{
|
||||||
fwrite(&b9,sizeof(char),1,fpout);
|
fwrite(&b9char,sizeof(char),1,fpout);
|
||||||
float t[3];
|
float t[3];
|
||||||
for(int z=0;z<3;++z)
|
for(int z=0;z<3;++z)
|
||||||
{
|
{
|
||||||
|
@ -671,7 +675,7 @@ namespace vcg {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(multit)
|
if(saveTexIndexFlag)
|
||||||
{
|
{
|
||||||
fprintf(fpout,"%d ",fp->WT(0).n());
|
fprintf(fpout,"%d ",fp->WT(0).n());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue