一、介绍
物体文件格式(.off)文件用于表示给定了表面多边形的模型的几何体。这里的多边形可以有任意数量的顶点。
普林斯顿形状Banchmark中的.off文件遵循以下标准:
1、.off文件为ASCII文件,以OFF关键字开头。
2、下一行是该模型的顶点数,面数和边数。边数可以忽略,对模型不会有影响(可以为0)。
3、顶点以x,y,z坐标列出,每个顶点占一行。
4、在顶点列表之后是面列表,每个面占一行。对于每个面,首先指定其包含的顶点数,随后是这个面所包含的各顶点在前面顶点列表中的索引。
即以下格式:
OFF
顶点数 面数 边数 x y z
x y z
...
n个顶点 顶点1的索引 顶点2的索引 … 顶点n的索引...
一个立方体的简单例子:
COFF
8 6 0
-0.500000 -0.500000 0.500000
0.500000 -0.500000 0.500000
-0.500000 0.500000 0.500000
0.500000 0.500000 0.500000
-0.500000 0.500000 -0.500000
0.500000 0.500000 -0.500000
-0.500000 -0.500000 -0.500000
0.500000 -0.500000 -0.500000
4 0 1 3 2
4 2 3 5 4
4 4 5 7 6
4 6 7 1 0
4 1 7 5 3
4 6 0 2 4
二、写入
(待验证)
#include <stdio.h>
#include <string>
#include <vector>
#include <Eigen/Eigen>
class Cube {
public:
int NVertices = 8;
int NFaces = 6;
int NEdges = 0;
std::vector<Eigen::Vector3d> Vertices;
std::vector<Eigen::Vector4i> NFaces;
void Init();
}
void Cube::Init() {
Vertices.resize(8);
Vertices[0] << -0.500000 -0.500000 0.500000;
Vertices[1] << 0.500000 -0.500000 0.500000;
Vertices[2] << -0.500000 0.500000 0.500000;
Vertices[3] << 0.500000 0.500000 0.500000;
Vertices[4] << -0.500000 0.500000 -0.500000;
Vertices[5] << 0.500000 0.500000 -0.500000;
Vertices[6] << -0.500000 -0.500000 -0.500000;
Vertices[7] << 0.500000 -0.500000 -0.500000;
Edges.resize(6);
Edges[0] << 0 1 3 2;
Edges[1] << 2 3 5 4;
Edges[2] << 4 5 7 6;
Edges[3] << 6 7 1 0;
Edges[4] << 1 7 5 3;
Edges[5] << 6 0 2 4;
}
int main() {
std::string off_file_path = "/home/alan/cube.off";
FILE *f = fopen(off_file_path.c_str(), "w");
if(f == nullptr){
std::cout << "Cannot open file: " << off_file_path;
}
Cube cube;
cube.Init();
fprintf(f, "COFF\n");
fprintf(f, "%d %d %d\n", cube.NVertices, cube.NFaces, cube.NEdges);
for (const auto& vertice : cube.Vertices) {
fprintf(f, "%lf %lf %lf %lf %lf %lf %lf\n",
vertice.x(), vertice.y(), vertice.z(), 0.8, 0.8, 0.8, 1.0); // 颜色信息(R,G,B,[A]),整数0~255或小数0.0~1.0
}
for (const auto& face : cube.NFaces) {
fprintf(f, "4 %d %d %d %d\n",
face[0], face[1], face[2], face[3]);
}
fclose(f);
}
三、显示
安装MeshLab:
sudo apt-get install meshlab
用MeshLab打开(双击.off文件或将.off文件拖拽到MeshLab中)
参考:
http://shape.cs.princeton.edu/benchmark/documentation/off_format.html