glDrawArrays不绘制

时间:2013-04-26 01:01:34

标签: c++ opengl

我使用向量来存储顶点和普通数据

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

指出我出错的地方。

1 个答案:

答案 0 :(得分:3)

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

你应该有与顶点相同数量的法线。