这是导致错误的行
vector<transform>::iterator transformIter;
for (transformIter = (*objIter)->transforms.begin(); transformIter != (*objIter)->transforms.end(); objIter++) {
handleTransform((*transformIter));
}
无论 vector 中有多少变换,它都发生在循环的第二次迭代中。
obj 结构如下所示:
struct obj {
vector<glm::vec4> vertices;
vector<int> elements;
vector<object> objects;
vector<transform> transforms;
};
函数 handleTransform 是:
void handleTransform(transform currentTransform) {
if (currentTransform.type == 'r') {
glRotatef(currentTransform.coordinates.x, 1.0f, 0.0f, 0.0f);
glRotatef(currentTransform.coordinates.y, 0.0f, 1.0f, 0.0f);
glRotatef(currentTransform.coordinates.z, 0.0f, 0.0f, 1.0f);
}
if (currentTransform.type == 's') {
glScalef(currentTransform.coordinates.x, currentTransform.coordinates.y, currentTransform.coordinates.z);
}
if (currentTransform.type == 't') {
glTranslatef(currentTransform.coordinates.x, currentTransform.coordinates.y, currentTransform.coordinates.z);
}
}
遍历 obj 中的其他 vector 不会导致任何 vector 问题,所以我不得不想象它与 handleTransform 函数有关,但我无法弄清楚。
最佳答案
将objIter++
替换为++transformIter
。
关于c++ - 错误 : vector iterators incompatible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29064039/