2016-09-28 3 views
-1

Чтобы интерполировать положение вершин в вершинном шейдере для анимации морфинга между двумя объектами морфинга, я посылаю шейдеру две вершинные позиции. Теперь у меня есть сетка, у которой около 600 морфовых мишеней, и у меня возникает ощущение, что не стоит пытаться отправить вершинные шейдеры на 600 вершинных позиций. Может кто-нибудь, пожалуйста, скажите мне, что является правильным способом для анимации объекта с таким количеством целей морфинга?морфирующая анимация в вершинном шейдере

P.S. Я очень новичок в программировании на 3d.

ответ

0

Идея проста: только отправьте данные цели морфинга, которые вы намереваетесь использовать.

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

В качестве примера, представьте следующее распределение буферной памяти:

|----Morph Target 0----|----Morph Target 1----|----...----|----Morph Target N----| 
K      L      M   Z 

Чтобы смешать между целями 0 и 1, вы звоните glVertexAttribPointer(0, ..., (void*)K) и glVertexAttribPointer(1, ..., (void*)L), где K и L являются смещением целей морфинга в буфере ,

Очевидно, что вы можете смешивать только две цели морфинга. Но вы можете сочетаться между любыми двумя.

У меня такое ощущение, что не стоит пытаться отправить вершинные шейдеры на 600 вершинных позиций.

Это более того, что это невозможно. Количество атрибутов ограничено реализацией, и это число обычно невелико (от 16 до 32).

 Смежные вопросы

  • Нет связанных вопросов^_^