2014-02-24 2 views
1

Я разрабатываю приложение на libgdx, и я пытаюсь воспроизвести анимацию, созданную на Blender, но я продолжаю получать неизвестную ошибку анимации. У меня есть этот код в мой создать метод:LibGDX - Неизвестная ошибка анимации

model = modelLoader.loadModel(Gdx.files.getFileHandle("i1.g3db", FileType.Internal)); 
modelInstance = new ModelInstance(model); 
modelInstance.transform.rotate(1, 0, 0, -90); 
modelInstance.transform.translate(0, 0, -2); 
controller = new AnimationController(modelInstance); 
controller.setAnimation("moveHand",1); 

И это в моем визуализации метод:

camera.update(); 
camController.update(); 
controller.update(Gdx.graphics.getDeltaTime()); 
modelBatch.begin(camera); 
modelBatch.render(modelInstance, environment); 
modelBatch.end(); 

Я пытался вырезать куски, которые не относятся к вопрос. Вот рис из dopesheet в Blender, который показывает, что я назвал мою анимацию соответствующим образом:

enter image description here Каждый имеет представление о том, что может быть проблема, потому что я торчу на этом долгое время, спасибо ! У меня есть анимационные файлы (.g3db, .blender), загруженных здесь, если кто-то чувствует, как открыть их:

https://www.dropbox.com/s/xyx74tx5mbyj9i3/i1.zip

ответ

2

На общей ноте: избегать использования в верхнем регистре (и пробелы и т.д.) в именах анимации. Также проверьте https://github.com/libgdx/libgdx/wiki/3D-animations-and-skinning для получения дополнительной информации об анимации и https://github.com/libgdx/libgdx/wiki/Importing-Blender-models-in-LibGDX для получения информации об использовании моделей Blender в LibGDX.

Преобразование файла в .g3dj с использованием опции командной строки -o G3DJfbx-conv, например. fbx-conv -f -o G3DJ i1.fbx (где -f используется для перевода координат текстуры). Обязательно обновите свой код, чтобы использовать этот файл G3DJ, а не предыдущий файл G3DB. Затем откройте полученный файл .g3dj, используя текстовый редактор (например, блокнот или текстовый редактор вашего ide/eclipse). Файл должен быть легко читаемым (см. http://blog.xoppa.com/behind-the-3d-scenes-part1/ для получения дополнительной информации о том, как его прочитать) и содержать раздел (json key) под названием animations.

Если в файле нет анимации, он должен выглядеть как "animations": [] в нижней части файла. В этом случае обязательно проверяйте экспорт анимаций в блендере. См. Также: https://github.com/libgdx/libgdx/wiki/Importing-Blender-models-in-LibGDX.

Если в файле есть анимация, они включены внутри массива (между "animations": [ и ]). Обратите внимание, что анимация может занимать много места, поэтому фактическая строка "animations": [ может быть расположена где-то посередине файла. В этом случае убедитесь, что имя (id) анимации точно соответствует строке, используемой для указания анимации.

Если анимация включена в файл и строка соответствует, а затем перечислить все анимации внутри модели/modelinstance, чтобы гарантировать, что они правильно загружены:

for (Animation anim : modelInstance.animations) 
    Gdx.app.log("Animation", anim.id); 

Если анимация не включена в ModelInstance заменить modelInstance с model в этом фрагменте, чтобы убедиться, что он включен в модель. Если он также не включен в модель, обязательно обновите/очистите рабочее пространство.

+0

Привет, Xoppa, большое спасибо за ваш подробный ответ! Я преобразовал модель в g3dj, и теперь я вижу анимацию в нижней части файла. Однако, когда я пытаюсь запустить его, я получаю «файл анализа ошибок: I_new.g3dj в com.badlogic.gdx.utils.UBJsonReader.parse (UBJsonReader.java: 47) "error; Должен ли я использовать тот же код для импорта файла как для g3db до этого? – user43051

+1

Если вы не используете AssetManager (который я бы посоветовал вам использовать), вам нужно будет указать JsonReader для файлов G3DJ (вместо UBJsonReader для файлов G3DB). Например, новый G3dModelLoader (новый JsonReader(), resolver). См. http://blog.xoppa.com/loading-models-using-libgdx/ о том, как для загрузки с помощью AssetManager. – Xoppa

+0

Я реализовал AssetManager, теперь он показывает модель, но когда я добавляю строку «controller.update (Gdx.graphics.getDeltaTime());», она возвращает исключение нулевого указателя. здесь: http://pastebin.com/E5tL5dJy Я что-то упустил? – user43051

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