return -1;
}
+#define HAS_VN 1
+#define HAS_VT 2
+
int cmesh_dump_obj_file(struct cmesh *cm, FILE *fp, int voffs)
{
+ static const char *fmtstr[] = {" %u", " %u//%u", " %u/%u", " %u/%u/%u"};
int i, j, num, nelem;
+ unsigned int aflags = 0;
if(!cmesh_has_attrib(cm, CMESH_ATTR_VERTEX)) {
return -1;
}
if(cmesh_has_attrib(cm, CMESH_ATTR_NORMAL)) {
+ aflags |= HAS_VN;
nelem = cm->vattr[CMESH_ATTR_NORMAL].nelem;
if((num = dynarr_size(cm->vattr[CMESH_ATTR_NORMAL].data)) != cm->nverts * nelem) {
warning_log("normal array size (%d) != nverts (%d)\n", num, cm->nverts);
}
if(cmesh_has_attrib(cm, CMESH_ATTR_TEXCOORD)) {
+ aflags |= HAS_VT;
nelem = cm->vattr[CMESH_ATTR_TEXCOORD].nelem;
if((num = dynarr_size(cm->vattr[CMESH_ATTR_TEXCOORD].data)) != cm->nverts * nelem) {
warning_log("texcoord array size (%d) != nverts (%d)\n", num, cm->nverts);
fputc('f', fp);
for(j=0; j<3; j++) {
unsigned int idx = *idxptr++ + 1 + voffs;
- fprintf(fp, " %u/%u/%u", idx, idx, idx);
+ fprintf(fp, fmtstr[aflags], idx, idx, idx);
}
fputc('\n', fp);
}
for(i=0; i<numtri; i++) {
fputc('f', fp);
for(j=0; j<3; j++) {
- fprintf(fp, " %u/%u/%u", idx, idx, idx);
+ fprintf(fp, fmtstr[aflags], idx, idx, idx);
++idx;
}
fputc('\n', fp);