OpenGL:使用顶点数组绘制立方体会导致图形故障

|| 当尝试使用顶点数组(而不是使用立即模式渲染)在OpenGL中绘制以下四边形时,我得到图片中所示的图形故障(线段),可以在下面的第二个链接中找到该故障。该线似乎向上延伸到无穷大。
GLdouble vertices[] = {
    // back
    0.0, 0.0, 0.0,
    si,  0.0, 0.0,
    si,  -si, 0.0,
    0.0, -si, 0.0,

    // front
    0.0, 0.0, si,
    0.0, -si, si,
    si,  -si, si,
    si,  0.0, si,

    // left
    0.0, 0.0, 0.0,
    0.0, -si, 0.0,
    0.0, -si, si,
    0.0, 0.0, si,

    // right
    si, 0.0, 0.0,
    si, 0.0, si,
    si, -si, si,
    si, -si, 0.0,

    // top
    0.0, 0.0, 0.0,
    0.0, 0.0, si,
    si, 0.0, si,
    si, 0.0, 0.0,

    // bottom
    0.0, -si, 0.0,
    si, -si, 0.0,
    si, -si, si,
    0.0, -si, si,
};
立即绘制:
 glBegin(GL_QUADS);
   for (int i = 0; i < sizeof(vertices)/sizeof(*vertices)/3; i++)
     glVertex3d(vertices[i * 3], vertices[i * 3 + 1], vertices[i * 3 + 2]);
 glEnd();
用顶点数组绘制:
glVertexPointer(3, GL_DOUBLE, 0, vertices);
glDrawArrays(GL_QUADS, 0, sizeof(vertices)/sizeof(*vertices));
图片: 校正以即时模式绘制的立方体 顶点数组绘制的毛刺立方体 我究竟做错了什么?     
已邀请:
尝试将抽签更改为
glVertexPointer(3, GL_DOUBLE, 0, vertices);
glDrawArrays(GL_QUADS, 0, 24);
sizeof()不能以您认为的方式工作。它不返回数组中元素的数量。您需要以某种方式跟踪该数组中的顶点数量,然后在glDrawArrays调用中使用该计数器。 编辑-更多信息: glDrawArrays中的最后一个参数是要渲染的顶点数。 sizeof(vertices)应该返回GLdouble *中的字节数(4个字节),sizeof(vertices *)应该返回GLdouble中的字节数(8个字节)。那么4/8在技术上应该四舍五入为零,因为它们是整数,因此我实际上不确定为什么它会呈现任何内容。 但是,我非常确定(假设您的顶点正确完成),如果将该数字更改为24,它将可以正常工作。     

要回复问题请先登录注册