查看单个帖子
旧 2009-05-06, 06:38 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】normals and texture coordinate

normals and texture coordinate
normals and texture coordinate
hello,
i need to know how to extract the texture coordinates and normals of all vertexs of a 3d solid.
my code is:
void dxf_3dsolid_geometria_obtener (dxf_polilinea_paso ** lineas, int * numerolineas, oddbentity punteroentidadglobal)
{
try
{
/* obtener un puntero al solido 3d */
oddb3dsolidptr punterosolido3d=oddb3dsolid::cast(punteroentidadgl obal);
/* explotar el s髄ido en mallas policara */
odrxobjectptrarray entidadesprimernivel;
punterosolido3d->explodegeometry(entidadesprimernivel);
for(unsigned i=0; i<entidadesprimernivel.size(); i++)
{
if( 0==strcmp("acdbpolyfacemesh", entidadesprimernivel[i]->isa()->name()) )
{
oddbpolyfacemeshptr mallapolycara = oddbpolyfacemesh::cast(entidadesprimernivel[i]);
/* para cada malla poly cara obtener sus tri醤gulos */
odrxobjectptrarray entidadessegundonivel;
mallapolycara->explode(entidadessegundonivel);
for(unsigned j=0; j<entidadessegundonivel.size(); j++)
{
if( 0==strcmp("acdbface", entidadessegundonivel[j]->isa()->name()) )
{
/* generar tri醤gulo */
oddbfaceptr punterocara = oddbface::cast(entidadessegundonivel[j]);
dxf_polilinea_paso polilinea;
polilinea.visible = 1;
polilinea.r = 255;
polilinea.g = 255;
polilinea.b = 255;
polilinea.relleno = 1;
polilinea.numero_puntos = 4;
polilinea.puntos = 0x0;
polilinea.puntos = (double*)malloc(4*3*sizeof(double));
odgepoint3d vertice;
/* primer punto */
punterocara->getvertexat(0, vertice);
polilinea.puntos[3*0+0] = vertice.x;
polilinea.puntos[3*0+1] = vertice.y;
polilinea.puntos[3*0+2] = vertice.z;
/* segundo punto */
punterocara->getvertexat(1, vertice);
polilinea.puntos[3*1+0] = vertice.x;
polilinea.puntos[3*1+1] = vertice.y;
polilinea.puntos[3*1+2] = vertice.z;
/* tercer punto */
punterocara->getvertexat(2, vertice);
polilinea.puntos[3*2+0] = vertice.x;
polilinea.puntos[3*2+1] = vertice.y;
polilinea.puntos[3*2+2] = vertice.z;
/* primer punto(es un tri醤gulo ) */
/*punterocara->getvertexat(0, vertice);*/
polilinea.puntos[3*3+0] = polilinea.puntos[3*0+0];
polilinea.puntos[3*3+1] = polilinea.puntos[3*0+1];
polilinea.puntos[3*3+2] = polilinea.puntos[3*0+2];
(*numerolineas) ++;
(*lineas) = (dxf_polilinea_paso *)realloc((*lineas), (*numerolineas)*sizeof(dxf_polilinea_paso));
(*lineas)[(*numerolineas)-1] = polilinea;
}
}
}
}
}
catch(...)
{
fprintf(stderr, "error en dxf_3dsolid_geometria_obtener\n");
}
}
greetings,
thank you very much

polyfacemesh and face does not have normals or texture coordinates. normals can be calculated manually for exploded 3dsolid faces.
texture coordinates also calculate only at rendering time, using current material and material mapper setupped to traits.
see for example triangleout() routine in directx or opengl rendering devices src.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)