OpenGL 使用 std::vector 和 glm::vec3

a_l*_*ner 5 c++ opengl vector glm-math

我遇到以下问题。

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

std::vector <glm::vec3> vertices;
Run Code Online (Sandbox Code Playgroud)

返回:

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.2500 00 -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]<<" ";
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将以下代码传递到 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);  
Run Code Online (Sandbox Code Playgroud)

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

对第一行稍加改动,

glBufferData(GL_ARRAY_BUFFER, sizeof(vert), &vert, GL_DYNAMIC_DRAW); //Here

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

glBindVertexArray(buffer); 
Run Code Online (Sandbox Code Playgroud)

在获取向量时,

const GLfloat vert[9] =
{-0.5,-0.5, 0.0,
  0.0, 0.5, 0.0,
  0.5,-0.5, 0.0};
Run Code Online (Sandbox Code Playgroud)

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

我的问题: 是否可以将矢量容器与 glm 结合使用?如果可以,如何实施?
我的假设:glVertexAttribPointer 函数从顶点容器的起始地址顺序读取。顶点容器的元素在我的记忆中都是支离破碎的。

Axa*_*alo 2

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