1

TestLine クラスのインスタンスを 2 つ以上作成して render クラスに追加すると、最後の 1 つだけがレンダリングされます。前のオブジェクトがレンダリングされない、または消えない

TestLine クラス:

void update(){
    glEnableClientState(GL_VERTEX_ARRAY);
    glBindBuffer(GL_VERTEX_ARRAY, xbo);
    glVertexPointer(2, GL_FLOAT, 0, 0);

    glDrawArrays(GL_LINES, 0, verts.size());
    glDisableClientState(GL_VERTEX_ARRAY);
}

void set(float x, float y, float x2, float y2){
    verts.push_back(x);
    verts.push_back(y);
    verts.push_back(x2);
    verts.push_back(y2);

   glGenBuffers(1, &xbo);
   glBindBuffer(GL_ARRAY_BUFFER, xbo);
   glBufferData(GL_ARRAY_BUFFER, verts.size() * sizeof(GLfloat), &verts[0], GL_STATIC_DRAW);
}

レンダー クラスの関数

void draw(){
    int size = lines.size();
    for(int i = 0; i < size; i++)
        lines[i]->update();
}
void add(TestLine* d){
    lines.push_back(d);
}
4

1 に答える 1

2
glBindBuffer(GL_VERTEX_ARRAY, xbo);

GL_VERTEX_ARRAYの有効な引数ではありませんglBindBuffer()

target:バッファオブジェクトがバインドされるターゲットを指定します。シンボリック定数は、、、、またはである必要がありますGL_ARRAY_BUFFERGL_ELEMENT_ARRAY_BUFFERGL_PIXEL_PACK_BUFFERGL_PIXEL_UNPACK_BUFFER

GL_ARRAY_BUFFER他の呼び出しと同じように使用します。


glDrawArrays(GL_LINES, 0, verts.size());

set()4つではなく、 2つの頂点のみを指定します。rawの代わりにvertsある種のマルチフロートstruct(例:)が含まれている場合、これは機能します。struct Vertex { float x, y; };float

これを試して:

glDrawArrays(GL_LINES, 0, verts.size() / 2);
于 2013-03-13T13:31:48.850 に答える