Анимации программирования 3D?

После некоторых копаний я в итоге посмотрел на исходный код и обнаружил, что bash не поддерживает пользовательских исполнителей. Ниже приведен патч для добавления нового дескриптора, который работает аналогично command_not_found_handler.

diff --git a/eval.c b/eval.c
index f02d6e40..8d32fafa 100644
--- a/eval.c
+++ b/eval.c
@@ -52,6 +52,10 @@
 extern sigset_t top_level_mask;
 #endif

+#ifndef EXEC_HOOK
+#  define EXEC_HOOK "command_exec_handle"
+#endif
+
 static void send_pwd_to_eterm __P((void));
 static sighandler alrm_catcher __P((int));

@@ -172,7 +176,15 @@ reader_loop ()
              executing = 1;
              stdin_redir = 0;

-             execute_command (current_command);
+             SHELL_VAR *hookf = find_function (EXEC_HOOK);
+              if (hookf == 0) {
+                  execute_command (current_command);
+              } else {
+                  char *command_to_print = make_command_string (current_command);
+                  WORD_LIST *og = make_word_list(make_word(command_to_print), (WORD_LIST *)NULL);
+                  WORD_LIST *wl = make_word_list(make_word(EXEC_HOOK), og);
+                  execute_shell_function (hookf, wl);
+              }

            exec_done:
              QUIT;

Затем можно определить function command_exec_handle() { eval $1; }, который будет выполняться вместо исходной команды, указанной в приглашении. Исходная команда полностью в первом параметре. command_exec_handle может быть указан в .bashrc, и он работает как ожидалось.

Обратите внимание: это очень опасно! Если вы запутаетесь и поместите плохой обработчик command_exec_handler в .bashrc, у вас может получиться оболочка, которая не выполняет команды. Это будет довольно сложно исправить без загрузки с живого компакт-диска.

7
задан William 1 April 2009 в 04:58
поделиться

1 ответ

В продуктивных средах аниматоры используют специализированные инструменты, такие как Autodesk 3DS Max для генерации keyframed анимаций 3D моделей. Для каждой анимации для каждой модели аниматор создает много поз для модели, названной ключевыми кадрами, которые затем экспортируются в формат данных игры.

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

Анимированные модели обычно создаются с иерархией кости. Существует корневая кость, которая управляет местоположением модели и ориентацией в игровом мире. Все другие кости определяются относительно некоторой родительской кости для создания дерева. Каждая вершина модели связывается с конкретной костью, таким образом, моделью можно управлять с намного меньшим количеством параметров: относительные положения, ориентации и масштабы каждой кости.

Гладкое очищение является техникой, используемой для улучшения качества анимаций. С гладким очищением вершина не связывается со всего одной костью, но это может быть связано с несколькими костями (обычно, жесткий предел, такой как 4, устанавливается; вершинам редко нужно 3) с соответствующими весами. Это делает задание аниматора тяжелее, так как он должен сделать намного больше работы с вершинами около соединений, но результатом является намного более гладкая анимация с меньшим количеством искажения вокруг соединений.

С другой стороны, некоторые игры используют процедурную анимацию, посредством чего данные анимации создаются во времени выполнения. Положения кости и ориентации вычисляются согласно некоторому алгоритму, такому как физика рэгдолла или инверсная кинематика. Другие опции, конечно, доступны, но они должны быть кодированы программистами.

Вместо того, чтобы процедурно анимировать кости и использовать вперед кинематику для определения местоположений всех вершин модели другая опция состоит в том, чтобы просто процедурно генерировать положение каждой вершины самостоятельно. Это допускает более сложные анимации, которые не связываются иерархиями кости, но конечно это намного более сложно и намного более твердо преуспеть.

18
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: