所以我试图在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中,然后再旋转并循环回到文件末尾...
如果有人能提供帮助,那将非常感谢!
答案 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 vertA
和struct 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;
}
}