Как сделать движение фигуры со следом?

Нарисовал точку, которая движется по экрану. Хочу, чтобы точка не просто ползла по экрану, а оставляла за собой след из точек (чтобы предыдущий кадр не затирался).

Удалил glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT). Работает, но инвертирует цвета (точки были черными на белом фоне, стали белыми на черном).

Удаление glutPostRedisplay() не помогает.

Как предотвратить обновление экрана, но фон оставить на месте?

#include <glut.h>
#include <windows.h>


float X;

void display()
{
    if (X < 0.8) 
    {
        glClearColor(1.0, 1.0, 1.0, 1.0);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glPointSize(8);


        glBegin(GL_POINTS);

            glColor3f(0, 0, 0);
            glVertex2f(X, X);

        glEnd();     
    }
    
    glutSwapBuffers();
}


void TimerFunction(int value) 
{
    X = X + 0.005;

    glutPostRedisplay();  // перерисовываем экран
    glutTimerFunc(3, TimerFunction, 1);  //запускаем таймер заново.
}


int main(int argc, char** argv)
{
    X = 0; 

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(0, 0);
    glutInitWindowSize(1920, 1080);
    glutCreateWindow("Проба");
    
    glutDisplayFunc(display);

    glutTimerFunc(3, TimerFunction, 1);

    glutMainLoop();
    
    return 0;
}

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

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

Предположение, что удаление glClear позволит продолжить рисование предыдущего кадра неверное. В большинстве случаев это будет не тот буфер, в котором рисовался предыдущий кадр и содержимое буфера перед рисованием не определено. glClear прежде всего позволит очистить его от мусора. Чтобы сохранять результат рисования предыдущего кадра его необходимо рендерить в текстуру, а текстуру копировать в экранный буфер.

→ Ссылка