资源简介
用三角形拟合球体,生成.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序列号代码
相关资源
- 用c++设计一个三角形类Triangle,包含三
- C++ 三维球体堆积程序
- 三角函数查表方式c语言实现
- c++ 输出正三角
- C++实战源码-用#打印三角形
- C++实战源码-在图像上绘制网格
- C++实战源码-绘制网格
- 杨辉三角形(c++源码)
- 杨辉三角.doc(截图+代码)
- 六角网格(Introduce to Hexagonal Grids.)
- c++ 求三角形面积
- 利用opencv,c++画网格代码
- C++实战源码-利用switch语句输出倒三角
- C++实战源码-打印杨辉三角
- 杨辉三角形
- 检测图片中的简单几何图形,如三角
- 三角形程序白盒测试文档
- c语言计算器含代码
- 三维立方体、锥形、球体编程实现v
- 计算机图形学实验 绘制渐变三角形
- 基于PCL点云的三角形网格孔洞修补
- 大学软件测试课程,判断三角型问题
- 给定点求取凸包并进行三角剖分
- MFC 科学计算器包括常用的三角函数
评论
共有 条评论