glDrawArrays 不绘制

glDrawArrays doesn't draw

本文关键字:绘制 glDrawArrays      更新时间:2023-10-16

我使用向量来存储顶点和法线数据

vector<float> vertex;
vector<float> normal;

例如:

normal.push_back(-1);
normal.push_back(0);
normal.push_back(0);
vertex.push_back(BARRIER_RADIUS);
vertex.push_back(POLE_HEIGHT);
vertex.push_back(-POLE_RADIUS);
for (int i = POLE_POINTS, i >= 0; i--)
{
    //add more vertex
}
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, &vertex[0]);
    glNormalPointer(GL_FLOAT, 0, &normal[0]);
    glDrawArrays(GL_TRIANGLE_FAN, 0, vertex.size());
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
//Add some more + Draw some thing else the same way

我什么也没得到。它不会在屏幕上画任何东西。

以前的版本,可以工作,如下所示:

glNormal3f(-1, 0, 0);
glBegin(GL_TRIANGLE_FAN);
    glVertex3f(BARRIER_RADIUS, POLE_HEIGHT, -POLE_RADIUS);
    for ()
    { 
        //add more vertex
        glVertex3f(........);
    }
glEnd();
//draw more the same way

告诉我哪里错了

您已经将vertex定义为float的矢量,但几何顶点由3个浮点数组成,因此这是一个混淆的方法。顶点的数量不是vertex.size(),而是它的三分之一。我不确定这是否是你唯一的问题,但这确实是个问题。

法线的个数应该和顶点的个数一样