我使用向量来存储顶点和普通数据
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
指出我出错的地方。
答案 0 :(得分:3)
您已将vertex
定义为float
的向量,但几何顶点由3个浮点数组成,因此这是一个混淆的方法。顶点的数量不是vertex.size()
,而是三分之一。我不确定这是你唯一的问题,但这是一个问题。
你应该有与顶点相同数量的法线。