Линейная интерполяция между двумя кадрами в OpenGl3 и выше

0

Я имею два кадра (то есть две ячейки, состоящие из равного количества вершин), и я пытаюсь написать вершинный шейдер, который линейно интерполирует, чтобы преобразовать фрейм 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
    OpenGL 3+ Я считаю, что он обратно совместим со старыми версиями OpenGL, поэтому почему бы вам не реализовать его, как показано в примере. Если это работает, то это совместимо с большим количеством систем в любом случае !!!
Теги:
opengl
glsl

1 ответ

0

Самый простой способ - использовать два набора атрибутов позиции и единицу для коэффициента смешивания между 0 и 1, а затем просто смешивать их с использованием коэффициента смешивания через функцию mix GLSL. Когда вы полностью достигнете 1.0, вы можете вернуться к коэффициенту 0, но теперь использовать вторую сетку в качестве первого набора, просто обновив указатели на привязку вершин.

  • 0
    Это просто алгоритм, который я описываю выше. Мне интересно, как реализовать это в OpenGL3 +, где вам приходится иметь дело с вершинными буферами, а не устанавливать состояние с помощью GlBegin и End.
  • 0
    @CollinSchupman: и я на самом деле сказал вам, как это сделать. Используйте два атрибута вершины, это все, что нужно там

Ещё вопросы

Сообщество Overcoder
Наверх
Меню