如何为函数的参数使用无限数量的结构?



我正在用c++编写一个非常简单的OBJ导出器(用于VC6,因为我正在为一个只在那里编译的旧项目编写)

现在,我被困在弄清楚如何使用无限数量的结构,使顶点位置线。这听起来可能有点傻,但这是我第一个用c++编写的功能程序,所以我不是很了解这些概念。

我想我做错了,因为我在网上找不到我想做的事情。

这是我的头结构代码:

struct PointList {
float X;
float Y;
float Z;
};

. .和实际的OBJ导出函数的代码:

void OBJEXP::WriteOBJ(OBJEXP::PointList Points, std::string File) // Writes an OBJ.
{
ofstream    output(File + ".obj");
for (int i = 0; i < sizeof(Points); i += 1)
{
output << "v " + to_string(Points.X) + " " + to_string(Points.Y) + " " + to_string(Points.Z) + "n";
}
output.close();
cout << "All donen";
}

我的主文件(用于测试代码,这将在每次保存文件时运行:)

OBJEXP::PointList POINTZ;
int main()
{
POINTZ.X = 1.0f;
POINTZ.Y = 5.5f;
POINTZ.Z = 2.0f;
OBJEXP::WriteOBJ(POINTZ, "testobject");
std::cout << "Execution donen";
}

我的OBJ文件看起来像这样:

v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000

这显然是不正确的。

我更喜欢用vector:D

void OBJEXP::WriteOBJ(std::vector<OBJEXP::PointList> Points, std::string File) {
ofstream output(File + ".obj");
for (int i = 0; i < Points.size(); i += 1) {
output << "v " + to_string(Points[i].X) + " " + to_string(Points[i].Y) + " " + to_string(Points[i].Z) + "n";
}
output.close();
cout << "All donen";
}

主要代码:

OBJEXP::PointList POINTZ;
int main() {
POINTZ.X = 1.0f;
POINTZ.Y = 5.5f;
POINTZ.Z = 2.0f;
std::vector tmp;
tmp.push_back(POINTZ);
OBJEXP::WriteOBJ(tmp, "testobject");
}

尽管您使用了古老的编译器,但。obj的格式不包括列表前的vert/uvs/normals/faces的数量。

您必须读取该文件两次:首先计算出现的vert/uvs/normals/faces的数量,然后再次解析实际值。

现代编译器使用std::string,std::stringstreamstd::vector使这变得微不足道。使用c风格的字符串、数组和FILE*将使这成为一场噩梦。

最新更新