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

标签 c++ opengl vector standard-library

目前我正在尝试渲染加载到 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/

相关文章:

c++ - 有没有办法提示用户使用什么数据类型作为模板 C++

c++ - 在 C++ 中,如果我有一个 vector 类型的 vector ,如果我在 : vector_variable. push_back() 之后执行此操作会发生什么?

c++ - 这种方法会涉及内存重新分配从而影响其效率吗?

结构的c++ vector 和从文件中读取

c++ - 跨平台 C++ 代码和单个 header - 多种实现

c++ - 相同大小的 int 与 BGRA 并集产生不同的结果

c++ - Postgresql - 从 SELECT 中排除一些结果

opengl - 阴影贴图混淆

c++ - opengl重新编译显示列表

c++ - 在 MacOSX 上编译 OpenGL 程序时出错 ('ld: library not found for -lopengl32' )