| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /******************************************************************************/
- #include "stdafx.h"
- namespace EE{
- /******************************************************************************/
- Bool ExportOBJ(C Str &name, C MeshLod &mesh)
- {
- FileText f; if(f.write(name, ANSI))
- {
- Int vp=1,
- vt=1,
- vn=1;
- FREPA(mesh)
- {
- C MeshPart &part=mesh.parts[i];
- C MeshBase *base=&part.base;
- MeshBase temp; if(!base->is() && part.render.is())base=&temp.create(part.render);
- C Vec *pos =base->vtx.pos ();
- C Vec *nrm =base->vtx.nrm ();
- C Vec2 *tex =base->vtx.tex0();
- f.putLine(S+"g " +Replace(part.name, '\n', ' '));
- if(pos)FREPA(base->vtx)f.putLine(S+"v " +Dbl(-pos[i].x)+' '+Dbl( pos[i].y)+' '+Dbl(pos[i].z));
- if(tex)FREPA(base->vtx)f.putLine(S+"vt "+Dbl( tex[i].x)+' '+Dbl(1-tex[i].y) );
- if(nrm)FREPA(base->vtx)f.putLine(S+"vn "+Dbl(-nrm[i].x)+' '+Dbl( nrm[i].y)+' '+Dbl(nrm[i].z));
- if(C VecI *tri=base->tri.ind())FREPA(base->tri)
- {
- VecI t=tri[i]; t.reverse();
- f.putText(S+"f "+(t.x+vp)+'/'); if(tex)f.putText(S+(t.x+vt)); f.putChar('/'); if(nrm)f.putText(S+(t.x+vn));
- f.putText(S+ " "+(t.y+vp)+'/'); if(tex)f.putText(S+(t.y+vt)); f.putChar('/'); if(nrm)f.putText(S+(t.y+vn));
- f.putText(S+ " "+(t.z+vp)+'/'); if(tex)f.putText(S+(t.z+vt)); f.putChar('/'); if(nrm)f.putText(S+(t.z+vn));
- f.endLine();
- }
- if(C VecI4 *quad=base->quad.ind())FREPA(base->quad)
- {
- VecI4 q=quad[i]; q.reverse();
- f.putText(S+"f "+(q.x+vp)+'/'); if(tex)f.putText(S+(q.x+vt)); f.putChar('/'); if(nrm)f.putText(S+(q.x+vn));
- f.putText(S+ " "+(q.y+vp)+'/'); if(tex)f.putText(S+(q.y+vt)); f.putChar('/'); if(nrm)f.putText(S+(q.y+vn));
- f.putText(S+ " "+(q.z+vp)+'/'); if(tex)f.putText(S+(q.z+vt)); f.putChar('/'); if(nrm)f.putText(S+(q.z+vn));
- f.putText(S+ " "+(q.w+vp)+'/'); if(tex)f.putText(S+(q.w+vt)); f.putChar('/'); if(nrm)f.putText(S+(q.w+vn));
- f.endLine();
- }
- if(pos)vp+=base->vtxs();
- if(tex)vt+=base->vtxs();
- if(nrm)vn+=base->vtxs();
- }
- return true;
- }
- return false;
- }
- /******************************************************************************/
- }
- /******************************************************************************/
|