Интерполировать буферы данных, используя OpenGL?

Я пишу приложение, которое загружает вершины двух сеток (которые служат ключевыми кадрами) в два отдельных плавающих буфера данных OpenGL. Две сетки имеют одинаковое количество вершин.

Я хотел бы вычислить промежуточные кадры, используя линейную интерполяцию между этими двумя буферами (где я могу указать вес интерполяции в качестве значения между 0 и 1). В настоящее время я выполняю интерполяцию на процессоре, но я хотел бы перенести вычисления в графический процессор для более быстрого вычисления промежуточных кадров.

Есть ли способ сделать это, используя только OpenGL (т.е. не OpenCL)? Если так, то как?

0

Решение

Предполагая, что вершины хранятся в одном и том же порядке в обоих буферах, вы можете просто привязать каждый из буферов к атрибуту в вершинном шейдере. В сочетании с униформой, которая управляет интерполяцией (назовем ее t), которая идет от 0 (только первый буфер) до 1 (только второй буфер), вы можете выполнить линейную интерполяцию перед записью в gl_Position, Шейдер может выглядеть примерно так:

in vec4 buffer1; //Bind buffer1 to this attribute
in vec4 buffer2; //Bind buffer2 to this attribute

uniform float t; //Interpolation parameter between 0 and 1

void main()
{
gl_Position = (1 - t) * buffer1 + t * buffer2;
}
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]