前些日子做作业时,碰到读取utah茶壶数据文件的问题。文件中包括:
- 茶壶上控制点的坐标总数;
- 所有的控制点坐标位置x,y,z,三个值在同一行且由逗号分隔;
- 控制点组成的控制面总数;
- 每个控制面的16个控制点的位置,相当于指针位置。每行16个值,逗号分割。
数据结构如下图所示,2和4的部分数据太多故没有全部显示出来,大家看到下图应该能理解文件的具体格式。
接下来的目的就是读取文件中的数据,把2中每行的坐标和4中每行的数字存到相应的数组中。下面是c++写法。个人对C++不算精通,如果有更好的方法欢迎各位在评论区一起讨论。
#include <fstream>
#include <iostream>
#include <string>
#define teapot_patches_num 32
#define teapot_vertices_num 306
#define control_points_num 16
int teapot_patches[teapot_patches_num][control_points_num];
/* struct vec3 {
float x;
float y;
float z;
}
这里我用的是一个含float类型x,y,z三个值的结构体,按照个人需要改成二维数组也可。
*/
vec3 teapot_vertices[teapot_vertices_num];
void ReadFile()
{
std::string in_file_nam