我遇到了以下问题。
我已经将 8 个glm::vec3加载到std::vector中,如下所示:
返回值: 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 如果:
当我将以下代码传递到OpenGL时,
我的着色器程序已加载并打开了窗口,但是没有立方体。
对第一行进行轻微修改,
从中提取向量时,
我已经将 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);
从中提取向量时,
const GLfloat vert[9] =
{-0.5,-0.5, 0.0,
0.0, 0.5, 0.0,
0.5,-0.5, 0.0};
并且一个漂亮的红色三角形被绘制在屏幕上。
我的问题:在glm中是否可以与向量容器结合使用?如果可以,如何实现?
我的假设:glVertexAttribPointer函数正在从顶点容器的起始地址按顺序读取。顶点容器的元素在我的内存中是分散的。
glDrawElements
和我的cube.obj文件中的面来连接点。 - a_learnerGLuint vao; glGenVertexArrays(1, &vao); glBindVertexArray(vao);
,而我在'glBindVertexArray(buffer);中绑定的是VBO,因为我认为由于
glBindBuffer(GL_ARRAY_BUFFER, vbo);和
glBufferData(GL_ARRAY_BUFFER, sizeof(vert), &vert, GL_DYNAMIC_DRAW);`的GL_ARRAY_BUFFER参数目标,它已经保存到了VAO中。如果不是这样,那么为什么它会绘制我想要的对象呢?我还没有弄清楚着色器。我只看到一个红色的正方形。 - a_learnerstd::vector<glm::vec3>
替换数组呢? - Quentin