C++ openGL与向量
我正在使用openGL,目前正在向它传递一个顶点数组。 当我向OpenGL传递一个顶点数组和一个类似C++ openGL与向量,c++,arrays,opengl,stl,C++,Arrays,Opengl,Stl,我正在使用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.000000000
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};
进入
我改变了这些台词
// 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);
进入
因为我需要法向量信息来做其他事情
有人知道如何正确使用std::vector吗
谢谢。如果您使用的是
向量
,则需要使用顶点.size()*sizeof(GLfloat)
而不是sizeof(顶点)
。sizeof
操作符将为您提供vector
在堆栈上占用的内存字节数,而不是它包含的动态分配数组的大小。如果您使用的是vector
,则需要使用顶点。size()*sizeof(GLfloat)
而不是sizeof(顶点)
。sizeof
操作符将为您提供vector
在堆栈上占用的内存字节数,而不是它包含的动态分配数组的大小
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);