1

所以我试图用c ++编写一小段代码,它将读入一个文件(verts,vect normals,vert texture coords and faces (v/vt/vn v/vt/vn v/vt/vn) etc ) 我有点迷失了自己。

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

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 中,然后是 vertC 并再次循环返回直到文件结束......

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

4

2 回答 2

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 vertAand struct vertBandstruct vertC都是相同的。所以也许你不需要三个不同的结构。

于 2013-04-15T18:58:16.010 回答
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;
    }
}
于 2013-04-15T18:58:32.023 回答