C++ c++/openGL-类/对象中的VBO/VAO代码根本不渲染

C++ c++/openGL-类/对象中的VBO/VAO代码根本不渲染,c++,opengl,shader,vector-graphics,C++,Opengl,Shader,Vector Graphics,我正在OpenGL中为矢量图形制作一个小游戏引擎,它在早期阶段就已经被打破了。我让它处理main.cpp文件中一个对象的所有数据,但一旦我将所有代码移到一个名为object的类中,它就完全停止了工作。我没有实现对象系统之前的旧版本代码,但是现在所有的代码都在。我认为初始化代码(src/Object.cpp中的Object::genVAO())有问题,但我无法找出问题所在 我将复制我认为与此相关的代码,但文件中有大量代码,因此我将删除所有未使用的方法和具有明显函数的方法。我建议查看Github以获

我正在OpenGL中为矢量图形制作一个小游戏引擎,它在早期阶段就已经被打破了。我让它处理main.cpp文件中一个对象的所有数据,但一旦我将所有代码移到一个名为object的类中,它就完全停止了工作。我没有实现对象系统之前的旧版本代码,但是现在所有的代码都在。我认为初始化代码(
src/Object.cpp
中的
Object::genVAO()
)有问题,但我无法找出问题所在

我将复制我认为与此相关的代码,但文件中有大量代码,因此我将删除所有未使用的方法和具有明显函数的方法。我建议查看Github以获取完整的文件。另外,假设在需要时包含了所有标头,并防止重复包含

在我发布大量代码之前的最后一件事是,我认为问题最有可能发生的事情是靠近顶部的,不太可能发生的事情是朝底部的

源代码 大多数文件中使用的重要结构:
struct顶点{
glm::vec3位置;
glm::vec3颜色;
};
结构着色器{
GLuint程序;
GLuint mvp;
闪烁吸引位置;
闪烁的吸引色;
};
(修剪)对象。cpp
使用名称空间向量2;
对象::对象(标准::向量v、标准::向量i、glm::向量3位置、glm::四次旋转、glm::向量3比例)
{
顶点=v;
指数=i;
size=i.size()/3;
pos=位置;
旋转=旋转;
scl=量表;
genMatrix();
}
void对象::genVAO(着色器s)
{
顶点v[顶点.大小()];
复制(顶点.begin(),顶点.end(),v);
GLuint i[index.size()];
复制(index.begin()、index.end()、i);
glGenVertexArrays(1和vao);
glBindVertexArray(vao);
GLuint vertexBuffer,indexBuffer;
glGenBuffers(1和vertexBuffer);
glGenBuffers(1和indexBuffer);
glBindBuffer(GL_数组_BUFFER,vertexBuffer);
glBufferData(GLU数组缓冲区,大小(v),v,GLU静态图);
glBindBuffer(GL_元素数组缓冲区,indexBuffer);
glBufferData(GL元素\数组\缓冲区,大小(i),i,GL静态\绘图);
glvertexattributepointer(s.attribIDPosition,3,GL_FLOAT,false,sizeof(顶点),MEMBER_OFFSET(顶点,位置));
GlenableVertexAttributeArray(s.attribIDPosition);
glvertexattributepointer(s.attribIDColor,3,GL_FLOAT,false,sizeof(顶点),MEMBER_OFFSET(顶点,颜色));
GlenableVertexAttributeArray(s.attribIDColor);
glBindVertexArray(0);
glBindBuffer(GL_数组_BUFFER,0);
glBindBuffer(GL_元素_数组_缓冲区,0);
GLDisableVertexAttributeArray(s.attribIDPosition);
GLDisableVertexAttribute数组(s.attribIDColor);
}
void对象::genMatrix()
{
modelMatrix=glm::translate(glm::mat4(),pos)*glm::toMat4(rot)*glm::scale(scl);
}
void对象::设置顶点(标准::向量v)
{
顶点=v;
}
void Object::setindex(std::vector i)
{
指数=i;
size=i.size()/3;
}
(修剪)对象.hpp
名称空间向量2{
类对象{
受保护的:
向量顶点;
std::向量指数;
整数大小;
GLuint vao=0;
glm::vec3 pos={0,0,0};
glm::quat rot={1,0,0,0};
glm::vec3 scl={1,1,1};
glm::mat4模型矩阵;
公众:
对象(std::vector v、std::vector i、glm::vec3位置、glm::quat旋转、glm::vec3比例);
void集合顶点(std::vector v);
void setindex(标准:向量i);
void genVAO(着色器s);
空矩阵();
};
}
**(修剪)render.cpp
使用名称空间向量2;
void vector2::drawModel(对象o,着色器s)
{
glBindVertexArray(o.getVAO());
glUseProgram(s.program);
glm::mat4 mvp=g_Camera.GetProjectionMatrix()*g_Camera.GetViewMatrix()*o.getMatrix();
glUniformMatrix4fv(s.mvp,1,GL_FALSE,glm::value_ptr(mvp));
GLD元素(GL_三角形,o.getSize(),GL_无符号整数,缓冲区偏移量(0));
glUseProgram(0);
glBindVertexArray(0);
}
(已修剪)main.cpp
使用名称空间向量2;
着色器向量着色器;
标准::向量顶点={
{glm::vec3(0.00,2.00,-1.00),glm::vec3(0,1,0.2)},//0
{glm::vec3(0.00,0.00,4.00),glm::vec3(0,1,0.2)},//1
{glm::vec3(3.00,0.00,-5.00),glm::vec3(0,1,0.2)},//2
{glm::vec3(0.00,-1.50,-2.00),glm::vec3(0,1,0.2)},//3
{glm::vec3(-3.00,0.00,-5.00),glm::vec3(0,1,0.2)},//4
{glm::vec3(0.65,-1.50,-5.00),glm::vec3(0,1,0.2)},//5
{glm::vec3(-0.65,-1.50,-5.00),glm::vec3(0,1,0.2)},//6
{glm::vec3(0.65,0.00,-5.00),glm::vec3(0,1,0.2)},//7
{glm::vec3(-0.65,0.00,-5.00),glm::vec3(0,1,0.2)}//8
};
国际船舶尺寸=8*3;
标准::向量shipIndex={
0,     1,    2,  // 0
0,     1,    4,  // 1
3,     1,    2,  // 2
3,     1,    4,  // 3
2,     1,    4,  // 4
3,     5,    6,  // 5
3,     5,    7,  // 6
3,     6,    8,  // 7
};
目标船;
void DisplayGL()
{
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
drawModel(船舶、矢量着色器);
glutSwapBuffers();
}
int main(int argc,char*argv[])
{
InitGL(argc,argv);
InitGLEW();
GLuint vertexShaderV、geoShaderV、fragmentShaderV;
vertexShaderV=LoadShader(GL_VERTEX_SHADER,“../resources/shaders/vecshader/VERTEX.glsl”);
geoShaderV=LoadShader(GL_GEOMETRY_SHADER,“../resources/shaders/vecshader/GEOMETRY.glsl”);
fragmentShaderV=LoadShader(GL_FRAGMENT_SHADER,“../resources/shaders/vecshader/FRAGMENT.glsl”);
std::向量着色器v;
着色器v.向后推(vertexShaderV);
着色器v.推回(geoShaderV);
着色器v.向后推(fragmentShaderV);
vecShader.program=CreateShaderProgram(sha