Как плавно выводить на экран каждую вершину (или пиксель) у графика, как будто он появляется с анимацией? Modern OpenGL

Сейчас разрабатываю небольшую программу для рендеринга траектории полета в реальном времени. Входными данными является массив координат вершин (x, y, z) и координаты текстур. Когда я компилирую программу, на экран выводится сразу весь график. Я бы хотел рендерить каждую вершину по очереди, как анимацию, чтобы плавно вырастал на экране график. Возможно ли это?

Я пытался сделать искусственную задержку в Вершинном Шейдере

#version 330 core
layout (location = 0) in vec3 aPos;

layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;

uniform float u_time;
uniform float u_deltaTime;

uniform mat4 transform;
uniform mat4 model;
uniform mat4 view;
uniform mat4 projection;

float delay = 0.0;

void main()
{
if (delay < 5.0f)
    {
    gl_Position = projection * view * model * transform * vec4(aPos.x, aPos.y, aPos.z, 1.0f);
    TexCoord = vec2(aTexCoord.x, 1.0f - aTexCoord.y);
    }
    delay = delay + u_deltaTime;
};

u_deltaTime - юниформа, которую прописал в цикле while

while (!glfwWindowShouldClose(window))
    {
        float currentFrame = glfwGetTime();
        deltaTime = currentFrame - lastFrame;
        lastFrame = currentFrame;

        GLint deltaTimeUni = glGetUniformLocation(graphShader.ID, "u_deltaTime");
        glUniform1f(deltaTimeUni, deltaTime);
       

        std::cout << lastFrame << "\t lastFrame\n";
     
        // -----
        glfwPollEvents();

        
        // ------
        glClearColor(0.2f, 0.3f, 0.5f, 1.0f);
        
      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
      graphShader.use();

Вот мои atrribPointers для этого объекта

 glBindVertexArray(VAO);

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

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);

glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);

Я только начинаю осваивать OpenGL поэтому буду рад любой помощи. Могу предоставить больше кода, если понадобиться


Ответы (1 шт):

Автор решения: FatherOfFiveChildren

в glDrawElement есть параметр сколько рисовать, плавно увеличивай его и всё получится. (кажется второй параметр)

Только проверь что индексы идут по порядку

→ Ссылка