0

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

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

指出我哪里出错了。

4

1 回答 1

3

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

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

于 2013-04-26T02:05:15.520 回答