我遇到以下问题。
我已经将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期望的。