• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-09
  • 语言: C/C++
  • 标签: 三角  球体  网格  

资源简介

用三角形拟合球体,生成.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 = 

评论

共有 条评论