Моя задача: сделать алгоритм взвешенного сглаживания с буфером накопления в OpenGL. Другими словами, у меня есть массив пикселей, который мне нужно сдвинуть на один пиксель во всех направлениях с помощью множителей.
Моя проблема: я не очень понимаю, что делает мой код.
while(!glfwWindowShouldClose(window)) {
glReadBuffer(GL_FRONT);
glDrawBuffer(GL_FRONT);
glDrawPixels(800, 800, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
glAccum(GL_LOAD, 1.0);
glRasterPos2d(1.0, 0.0);
glAccum(GL_ACCUM, 2.0);
glRasterPos2d(0.0, 1.0);
glAccum(GL_ACCUM, 2.0);
glAccum(GL_RETURN, 1.0);
glfwPollEvents();
glfwSwapBuffers(window);
}
Как я понимаю, glRasterPos меняет позицию «курсора», поэтому с его изменением
моя картинка должна сместиться на один пиксель вправо и вниз. Но я не вижу никаких результатов сглаживания, просто мигание моей формы (массив пикселей содержит только белые пиксели). Я понимаю, что я должен сделать GL_ACCUM по всем девяти направлениям. И я должен использовать именно glRasterPos для этого.
Что я не понимаю с glAccum и glRasterPos?
призвание glRasterPos
ничего не перемещает, он просто устанавливает текущую позицию — рассматривайте это как присвоение значений внутренним posx
а также posy
переменные. Вы должны нарисовать ваше изображение снова (позвоните glDrawPixels
) чтобы увидеть эффект этого звонка.
Других решений пока нет …