我遇到以下问题。

我已经将8 glm::vec3加载到std::vector中,这样:

std::vector <glm::vec3> vertices;

返回:

0.250000 -0.250000 -0.250000
0.250000 -0.250000 0.250000
-0.250000 -0.250000 0.250000
-0.250000 -0.250000 -0.250000
0.250000 0.250000 -0.250000
0.250000 0.250000 0.250000
-0.250000 0.250000 0.250000
-0.250000 0.250000 -0.250000


如果:
for(int i{0}; i<8; i++){
    std::cout<<"\n";
    for(int j{0}; j<3; j++){
    std::cout<<vertices[i][j]<<" ";
    }
}

当我将以下代码传递给OpenGL时,
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * vertices.size(), &vertices[0],  GL_DYNAMIC_DRAW);

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

glBindVertexArray(buffer);

我的着色器程序加载并且窗口打开,但是没有立方体。

第一行略有改动,
glBufferData(GL_ARRAY_BUFFER, sizeof(vert), &vert, GL_DYNAMIC_DRAW); //Here

glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

glBindVertexArray(buffer);

从中获取 vector 时
const GLfloat vert[9] =
{-0.5,-0.5, 0.0,
  0.0, 0.5, 0.0,
  0.5,-0.5, 0.0};

屏幕上会绘制一个漂亮的红色三角形。

我的问题:是否可以将 vector 容器与glm结合使用?如果是这样,如何实现?
我的假设: glVertexAttribPointer函数从顶点容器的起始地址开始顺序读取。顶点容器的元素在我的整个内存中都是零散的。

最佳答案

在您的glBufferData()中,&vertices[0]应该应该是&vertices[0].x
那是因为&vertices[0]指向glm::vec3,但是您希望它指向float因为这就是OpenGL期望的。

10-07 12:06
查看更多