Привет, так что я был в основном тянет меня за волосы, пытаясь понять это 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);
, и если вы также очистите буфер глубины? glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); –
, который работал как шарм !!! почему бит буфера глубины необходимо очистить, чтобы первый треугольник был перерисован? в уроках не упоминается, что где-нибудь – hopjopper
ответьте на вопрос ниже, и я помету его как ответ – hopjopper