2016-01-06 5 views
0

Привет, так что я был в основном тянет меня за волосы, пытаясь понять это OpenGL путаницыне glDrawArray рисунок второй раз

я пытался найти ответы в книгах, в учебники, и даже экспериментировал с ним вокруг

SO в основном у меня есть opengl-программа, которая рисует первый раз мои два треугольника, однако, когда я пытаюсь перерисовать первый треугольник снова, он, похоже, не работает

Я не знаю, какую информацию мне не хватает, но ее нет. что имеет смысл

Насколько я понимаю, когда VAO и VBO были созданы и ограничены и буферизованы в память, а указатели указателей вершин установлены и включены, когда я свяжу объект vao, который я хочу рисовать столько раз, сколько мне нравится, я просто должны сделать это

после инициализации, которая работает для меня, проблема в том, что когда-то я перепривязывают другой объект Вао он не кажется, сделать это

мой код тихо долго, я могу вставить его здесь, если Вам нравится, но я думаю, что черновой части кода было бы достаточно

здесь

  GLfloat vec[] = {0.0f, 0.0f, 
          1.0f, -1.0f, 
          -1.0f, -1.0f}; 

      GLfloat vec2[] = {0.0f, 1.0f, 
          1.0f, 0.0f, 
          -1.0f, 0.0f}; 

    //next step is to upload data to graphics memory 

    //generating a buffer from openGL 
    GLuint vbo; 
    GLuint vbo2 ; 

    GLuint vao; 
    GLuint vao2; 

    glGenBuffers(1, &vbo); 
    glGenBuffers(1, &vbo2); 

    glGenVertexArrays(1, &vao); 
    glGenVertexArrays(1, &vao2); 

    //to upload the actual data must make the object active by binding it to a target 
    glBindBuffer(GL_ARRAY_BUFFER, vbo); 

    //upload the data of active object to memory 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vec), vec, GL_STATIC_DRAW); 

    glBindBuffer(GL_ARRAY_BUFFER, vbo2); 

    glBufferData(GL_ARRAY_BUFFER, sizeof(vec2), vec2, GL_STATIC_DRAW); 



    //bind and draw 

    glBindBuffer(GL_ARRAY_BUFFER, vbo); 
    glBindVertexArray(vao); 

    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, NULL); 


    glDrawArrays (GL_TRIANGLES, 0, 3); 
    glXSwapBuffers (dpy, glxWin); 

    sleep(3); 

    glClear(GL_COLOR_BUFFER_BIT); 

    //rendering second triangle 

    glBindBuffer(GL_ARRAY_BUFFER, vbo2); 
    glBindVertexArray(vao2); 

    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, NULL); 

    glDrawArrays (GL_TRIANGLES, 0, 3); 
    glXSwapBuffers (dpy, glxWin); 

    sleep(3); 
    //rendering the first triangle again------where the problem lies!!! 
    glClear(GL_COLOR_BUFFER_BIT); 

    glBindVertexArray(vao); 

    glEnableVertexAttribArray(0); 
    glVertexAttribPointer(0,2,GL_FLOAT, GL_FALSE, 0, NULL); 


    glDrawArrays (GL_TRIANGLES, 0, 3); 
    glXSwapBuffers (dpy, glxWin); 

    sleep(3); 
+0

, и если вы также очистите буфер глубины? glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); –

+0

, который работал как шарм !!! почему бит буфера глубины необходимо очистить, чтобы первый треугольник был перерисован? в уроках не упоминается, что где-нибудь – hopjopper

+0

ответьте на вопрос ниже, и я помету его как ответ – hopjopper

ответ

0

Вам также необходимо очистить буфер глубины glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

Если следовать учебнику, то вы, вероятно, включены глубина тестирование в установке шаблонного OPENGL она предоставила. Это связано с тем, что больше людей захочет использовать буфер глубины, чем нет.

вы также не можете позвонить glEnable(GL_DEPTH_TEST); во время установки.

Смежные вопросы