Как плавно выводить на экран каждую вершину (или пиксель) у графика, как будто он появляется с анимацией? 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 шт):
в glDrawElement есть параметр сколько рисовать, плавно увеличивай его и всё получится. (кажется второй параметр)
Только проверь что индексы идут по порядку