Я имею два кадра (то есть две ячейки, состоящие из равного количества вершин), и я пытаюсь написать вершинный шейдер, который линейно интерполирует, чтобы преобразовать фрейм 1 во фрейм 2. Я читал учебник, в котором показано, как это сделать в более старая версия OpenGL. Алгоритм в основном:
GLBegin
For each vertex in frame 1
Send equivalent vertex to uniform variable in vertex shader from frame 2
Send vertex from frame 1 to vertex shader
(shader uses mix() to linearly interpolate between the two XYZ values)
GLEnd
Но это не так, как делаются в OpenGL3+. Может ли кто-нибудь помочь мне подумать об алгоритме, в котором я мог бы использовать mix() в шейдере вершин, чтобы создать морфинг между двумя сетками/фреймами?
Самый простой способ - использовать два набора атрибутов позиции и единицу для коэффициента смешивания между 0 и 1, а затем просто смешивать их с использованием коэффициента смешивания через функцию mix
GLSL. Когда вы полностью достигнете 1.0, вы можете вернуться к коэффициенту 0, но теперь использовать вторую сетку в качестве первого набора, просто обновив указатели на привязку вершин.