【问题标题】:openGL and vector [duplicate]openGL和矢量[重复]
【发布时间】:2017-05-07 04:31:39
【问题描述】:

我正在使用 openGL,目前正在向它传递一个顶点数组。 当我向 OpenGL 传递一个带有类似数组的顶点数组时,它会成功运行

    GLfloat vertices[] = {
    0.500000000f, 0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f,
    0.500000000f, -0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f,
    0.500000000f, 0.500000000f, -0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f};

问题是当我用一个向量而不是像

这样的数组传递它时
    std::vector<GLfloat> vertices = {
    0.500000000f, 0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f,
    0.500000000f, -0.500000000f, 0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f,
    0.500000000f, 0.500000000f, -0.500000000f, 1.00000000f, 0.000000000f, 0.000000000f};

然后我在窗口中看不到三角形。

我的代码差不多是这样的 https://learnopengl.com/code_viewer.php?code=getting-started/coordinate_systems_with_depth

我改变了这一行

    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

进入

    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), &vertices[0], GL_STATIC_DRAW);

我改变了这些行

    // Position attribute
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(0);
    // TexCoord attribute
    glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
    glEnableVertexAttribArray(2);

进入

    // Position attribute
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
    glEnableVertexAttribArray(0);
    // NormalVector attribute
    glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
    glEnableVertexAttribArray(3);

因为我需要法线向量信息来做其他事情。

有人知道如何正确使用 std::vector 吗?

谢谢。

【问题讨论】:

    标签: c++ arrays opengl stl


    【解决方案1】:

    如果您使用的是vector,则需要使用vertices.size() * sizeof(GLfloat) 而不是sizeof(vertices)sizeof 运算符将为您提供vector 在堆栈上占用的内存字节数,而不是它包含的动态分配数组的大小。

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 1970-01-01
      • 2023-02-06
      相关资源
      最近更新 更多