資源簡介
用三角形擬合球體,生成.obj文件。輸出每個三角形的頂點,以及組成每個三角形的三個頂點
代碼片段和文件信息
#include?
#include?
#include?
typedef?struct?tagPointV3
{
float?x;?
float?y;?
float?z;
}?PointV3;
??????
typedef?struct?tagTriangleFacet
{
int?x;?
int?y;?
int?z;
}?TriangleFacet;
void?CubeTriangulation(PointV3?*?V?TriangleFacet?*?F?int?&?nV?int?&?nF?int?nS)
{
nV?=?0;
nF?=?0;
int?x?y?z;?//循環下標
for(x=nS;?x>-nS;?x--)//頂面頂點
{
for(y=-nS;?y<=nS;?y++)
{
V[nV].x?=?(float)?x;?
V[nV].y?=?(float)?y;
V[nV].z?=?(float)?nS;
nV++;
}
}
for(z=nS;?z>-nS;?z--)//背面頂點
{
for(y=-nS;?y<=nS;?y++)
{
V[nV].x?=?(float)?-nS;?
V[nV].y?=?(float)?y;
V[nV].z?=?(float)?z;
nV++;
}
}
for(x=-nS;?x {
for(y=-nS;?y<=nS;?y++)
{
V[nV].x?=?(float)?x;?
V[nV].y?=?(float)?y;
V[nV].z?=?(float)?-nS;
nV++;
}
}
for(z=-nS;?z {
for(y=-nS;?y<=nS;?y++)
{
V[nV].x?=?(float)?nS;?
V[nV].y?=?(float)?y;
V[nV].z?=?(float)?z;
nV++;
}
}
//面的頂點序號(頂面、背面、底面、前面)
int?i?j;
for(i=0;?i<8*nS-1;?i++)
for(j=0;?j<2*nS;?j++)
{
F[nF].x?=?i*(2*nS+1)+j;
F[nF].y?=?i*(2*nS+1)+j+1;
F[nF].z?=?(i+1)*(2*nS+1)+j;
nF++;
F[nF].x?=?(i+1)*(2*nS+1)+j;
F[nF].y?=?i*(2*nS+1)+j+1;
F[nF].z?=?(i+1)*(2*nS+1)+j+1;
nF++;
}
for(j=0;?j<2*nS;?j++)
{
F[nF].x?=?i*(2*nS+1)+j;
F[nF].y?=?i*(2*nS+1)+j+1;
F[nF].z?=?j;
nF++;
F[nF].x?=?j;
F[nF].y?=?i*(2*nS+1)+j+1;
F[nF].z?=?j+1;
nF++;
}
//面的頂點序號(左側面)
for(j=0;?j<2*nS-2;j++)
{
F[nF].x?=?(6*nS+1+j)*(2*nS+1);
F[nF].y?=?(6*nS+2+j)*(2*nS+1);
F[nF].z?=?nV+j;
nF++;
F[nF].x?=?nV+j;
F[nF].y?=?(6*nS+2+j)*(2*nS+1);
F[nF].z?=?nV+j+1;
nF++;
}
for(i=0;?i<2*nS-2;?i++)
for(j=0;?j<2*nS-2;?j++)
{
F[nF].x?=?nV+i*(2*nS-1)+j;
F[nF].y?=?nV+i*(2*nS-1)+j+1;
F[nF].z?=?nV+(i+1)*(2*nS-1)+j;
nF++;
F[nF].x?=?nV+(i+1)*(2*nS-1)+j;
F[nF].y?=?nV+i*(2*nS-1)+j+1;
F[nF].z?=?nV+(i+1)*(2*nS-1)+j+1;
nF++;
}
for(j=0;?j<2*nS-2;?j++)
{
F[nF].x?=?nV+i*(2*nS-1)+j;
F[nF].y?=?nV+i*(2*nS-1)+j+1;
F[nF].z?=?(4*nS-1-j)*(2*nS+1);
nF++;
F[nF].x?=?(4*nS-1-j)*(2*nS+1);
F[nF].y?=?nV+i*(2*nS-1)+j+1;
F[nF].z?=?(4*nS-2-j)*(2*nS+1);
nF++;
}
for(i=0;?i<2*nS-2;?i++)
{
F[nF].x?=?(6*nS-1-i)*(2*nS+1);
F[nF].y?=?nV+i*(2*nS-1);
F[nF].z?=?(6*nS-2-i)*(2*nS+1);
nF++;
F[nF].x?=?(6*nS-2-i)*(2*nS+1);
F[nF].y?=?nV+i*(2*nS-1);
F[nF].z?=?nV+(i+1)*(2*nS-1);
nF++;
}
for(i=0;?i<2*nS-2;?i++)
{
F[nF].x?=?nV+(i+1)*(2*nS-1)-1;
F[nF].y?=?(1+i)*(2*nS+1);
F[nF].z?=?nV+(i+2)*(2*nS-1)-1;
nF++;
F[nF].x?=?nV+(i+2)*(2*nS-1)-1;
F[nF].y?=?(1+i)*(2*nS+1);
F[nF].z?=?(2+i)*(2*nS+1);
nF++;
}
F[nF].x?=?6*nS*(2*nS+1);
F[nF].y?=?(6*nS+1)*(2*nS+1);
F[nF].z?=?(6*nS-1)*(2*nS+1);
nF++;
F[nF].x?=?(6*nS-1)*(2*nS+1);
F[nF].y?=?(6*nS+1)*(2*nS+1);
F[nF].z?=?nV;
nF++;
F[nF].x?=?(8*nS-1)*(2*nS+1);
F[nF].y?=?0;
F[nF].z?=?
- 上一篇:C語言FFT
- 下一篇:c++builder獲取Cpu序列號代碼
評論
共有 條評論