C++ 为什么赢了';我的openGL顶点缓冲区对象没有画任何东西吗?

C++ 为什么赢了';我的openGL顶点缓冲区对象没有画任何东西吗?,c++,opengl,C++,Opengl,我正在尝试使用gldrawerelements/Arrays函数在OpenGL4中渲染模型。我目前正在读取包含多边形顶点数据和索引的文件。我不能得到任何东西显示在屏幕上,虽然除了轴我使用的参考。我已经多次成功地使用这种通用方法。我不知道我会做错什么,我已经被困了将近一天了 这是我缓冲数据的地方 // get position of "in vec4 vPosition;" from shader program // displays axes properly vPosition = glGe

我正在尝试使用gldrawerelements/Arrays函数在OpenGL4中渲染模型。我目前正在读取包含多边形顶点数据和索引的文件。我不能得到任何东西显示在屏幕上,虽然除了轴我使用的参考。我已经多次成功地使用这种通用方法。我不知道我会做错什么,我已经被困了将近一天了

这是我缓冲数据的地方

// get position of "in vec4 vPosition;" from shader program
// displays axes properly
vPosition = glGetAttribLocation( program, "vPosition" );

// create buffers
glGenVertexArrays(2, vao);
glGenBuffers( 3, vbo );

// here I bind vao[0] and vbo[0] then buffer
// a set of XYZ axes which display correctly

// buffer model
glBindVertexArray( vao[1] );
glBindBuffer( GL_ARRAY_BUFFER, vbo[1] );
glBufferData( GL_ARRAY_BUFFER, sizeof(board->verts),
                board->verts, GL_STATIC_DRAW );

glEnableVertexAttribArray( vPosition );
glVertexAttribPointer( vPosition, 4, GL_FLOAT, GL_FALSE, 0,
                        BUFFER_OFFSET(0));

glBindBuffer( GL_ELEMENT_ARRAY_BUFFER , vbo[2] );
glBufferData(
        GL_ELEMENT_ARRAY_BUFFER,
        sizeof(board->indices),
        board->indices.data(),
        GL_STATIC_DRAW);
fyi board是一种冲浪板模型,其中读取GLD元素的顶点和索引。如果在调用glBufferData的正上方包含以下代码,则这些顶点和索引将正确打印出来

for( int i = 0; i < board->numVerts; i++ ){
    std::cerr << i << ":  "<<board->verts[i].x << " "<<board->verts[i].y<<" "<<
            board->verts[i].z << " " << board->verts[i].w << std::endl;
}
对抽屉元素(注释掉)的调用不显示任何内容。调用DrawArrays是一项故障排除工作,目的是查看我是否只是错误地使用了DrawElements(我过去只使用过DrawArrays)。线路板定义为
model3d*线路板
。这是它的班级

class model3d{
public:
    glm::vec4 *verts;
    std::vector<int> indices;
    int numVerts;
    int numPolys;
    model3d( const char*, const char* );
private:
    void load_coords( const char* );
    void load_polys( const char* );
};
classmodel3d{
公众:
glm::vec4*顶点;
std::向量指数;
int numVerts;
int numPolys;
model3d(常量字符*,常量字符*);
私人:
空荷载坐标(常量字符*);
无效荷载(常量字符*);
};

为什么我的数据看起来没有缓冲区?

不要使用
sizeof(board->verts)
,因为它只返回指针的大小。

不要使用
sizeof(board->verts)
因为它只返回指针的大小。

所以要清除,程序没有显示对象的任何内容?你的问题有点让人困惑。你确定
sizeof(board->verts)
返回的是正确的大小,而不是指针的大小吗?@TheAmateurProgrammer哦,你跟踪你了。将顶点更改为向量,并使用
board->verts.size()*sizeof(glm::vec4)
和tada。我猜单个指针的大小并不是缓冲lol所需的全部数据。感谢您的帮助,我会将其作为答案发布,以便其他人知道它已经回答了。因此,为了清楚起见,程序没有显示对象的任何内容?你的问题有点让人困惑。你确定
sizeof(board->verts)
返回的是正确的大小,而不是指针的大小吗?@TheAmateurProgrammer哦,你跟踪你了。将顶点更改为向量,并使用
board->verts.size()*sizeof(glm::vec4)
和tada。我猜一个指针的大小并不是缓冲lol的全部数据。谢谢你的帮助,我将把它作为一个答案发布,这样其他人就会知道它已经被回答了。
class model3d{
public:
    glm::vec4 *verts;
    std::vector<int> indices;
    int numVerts;
    int numPolys;
    model3d( const char*, const char* );
private:
    void load_coords( const char* );
    void load_polys( const char* );
};