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()ではなく、その 3 分の 1 です。それがあなただけの問題かどうかはわかりませんが、それは問題です。

頂点と同じ数の法線が必要です。

于 2013-04-26T02:05:15.520 に答える