gpt4 book ai didi

c++ - std::vector 超出范围

转载 作者:行者123 更新时间:2023-11-30 03:06:59 25 4
gpt4 key购买 nike

目前我正在尝试渲染加载到 vector 中的 .obj 模型。我试图将 Vector3D 对象从数组中拉出,但它给了我一个超出范围的错误。在数组崩溃之前它只会达到五个,例如当数组有 12 个对象时。这是渲染的代码。

glBegin(GL_TRIANGLE_STRIP);

for (int indx = 0; indx < mv3_faces.size(); ++indx)
{
if (mb_print_once)
{
std::cout << "Rendering Loop....Faces at 8: " << mv3_faces.at(5).x << " Current Index: " << indx << std::endl;
std::cout << "Rendering Loop X: " << mv3_faces.at(indx).x << " Y: " << mv3_faces.at(indx).y << " Z: " << mv3_faces.at(indx).z << std::endl;
}

glColor4f(1.0f, 1.0f, 0.0f, 1.0f);

glVertex3f(mv3_vertices.at(mv3_faces.at(indx).x).x, mv3_vertices.at(mv3_faces.at(indx).y).y, mv3_vertices.at(mv3_faces.at(indx).z).z);
}

mb_print_once = false;
glEnd();

忽略用于调试目的的 mb_print_once...。

最佳答案

您还记得 .OBJ 文件中的顶点索引从 1 而不是 0 开始吗​​?因此,从“f”标签读取顶点索引后,您必须将它们减 1。

还有一点评论,我强烈建议使用 [] 而不是 .at,虽然在这个例子中这是个好主意,所以你得到了异常(exception)。但一般来说,范围检查开销是不值得的,尤其是在如此高度优化的循环中。

关于c++ - std::vector 超出范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com