困惑于从文件读取结构中的结构

时间:2013-04-15 18:53:07

标签: c++ file-io struct models

所以我试图在c ++中编写一小段代码,它将读取文件(顶点,vect法线,垂直纹理坐标和面(v / vt / vn v / vt / vn v / vt /) vn)等我已经迷失了一点。

我从小开始,只读取一个只有顶点,颜色和面的立方体,但现在我已经掌握了一个更高的多边形模型(126个面),其中面部的描述不同(在此之前)没有vect normasl或vert纹理)因此我认为结构中的结构将是存储此信息的好方法。

inFile >> NUM_POLY;
indices = new polygon[NUM_POLY];
for (int i=0; i < NUM_POLY; i++)
{   
inFile >> indices[i].a;
inFile >> indices[i].b;
inFile >> indices[i].c;
}

这是我目前的代码,使用旧系统,但我将结构更改为此...

struct vertA {
int v;
int vt;
int vn;
};

struct vertB {
int v;
int vt;
int vn;
};

struct vertC {
int v;
int vt;
int vn;
};

struct polygon {
struct vertA;
struct vertB;
struct vertC;
};

所以令我困惑的是我如何将前3个整数存储到vertA结构中,接下来3个存在于vertB中,然后再旋转并循环回到文件末尾...

如果有人能提供帮助,那将非常感谢!

2 个答案:

答案 0 :(得分:1)

这是错误的

struct polygon {
struct vertA;
struct vertB;
struct vertC;
};

我猜你的意思

struct polygon {
    vertA va;
    vertB vb;
    vertC vc;
};

然后它非常简单(假设我理解你正确)

for (int i=0; i < NUM_POLY; i++)
{   
    inFile >> indices[i].va.v;
    inFile >> indices[i].va.vt;
    inFile >> indices[i].va.vn;
    inFile >> indices[i].vb.v;
    inFile >> indices[i].vb.vt;
    inFile >> indices[i].vb.vn;
    inFile >> indices[i].vc.v;
    inFile >> indices[i].vc.vt;
    inFile >> indices[i].vc.vn;
}

代码中的一个奇怪之处是struct vertAstruct vertB以及struct vertC都是相同的。所以也许你不需要三种不同的结构。

答案 1 :(得分:0)

我不确定我是否正确理解了这个问题(所以请在必要时纠正我),但看起来你想要这样的东西:

struct vertex
{
    int v;
    int vt;
    int vn;
}

struct polygon
{
    struct vertex a;
    struct vertex b;
    struct vertex c;
}

然后,要初始化它,请解释原始示例:

inFile >> NUM_POLY;
indices = new polygon[NUM_POLY];
for (int i = 0; i < NUM_POLY; i++)
{   
    inFile >> indices[i].a.v;
    inFile >> indices[i].a.vt;
    inFile >> indices[i].a.vn;
    inFile >> indices[i].b.v;
    inFile >> indices[i].b.vt;
    inFile >> indices[i].b.vn;
    inFile >> indices[i].c.v;
    inFile >> indices[i].c.vt;
    inFile >> indices[i].c.vn;
}

您还可以使用数组而不是三个单独的顶点结构来缩短代码:

struct polygon
{
    struct vertex v[3];
}

然后使用循环初始化:

inFile >> NUM_POLY;
indices = new polygon[NUM_POLY];
for (int i = 0; i < NUM_POLY; i++)
{   
    for (int i = 0; j < 3; j++)
    {
        inFile >> indices[i].v[j].v;
        inFile >> indices[i].v[j].vt;
        inFile >> indices[i].v[j].vn;
    }
}