Загрузка 3д модели в cocos3d

Я новичок в cocos3d и читал некоторую информацию о загрузке 3d-моделей в cocos3d. Нативный способ добавления 3d-моделей в cocos3d — это, как я понял, конвертация моделей, полученных из Blender или 3DsMax, в формат POD через конвертеры. Не показалось ли это немного сложным? В моем приложении я могу легко сделать это, поскольку у меня мало моделей, но предположим, что я пишу большую игру с сотнями или тысячами моделей, должен ли я делать то же самое? Преобразовать каждую модель, которая у меня есть? Это хорошая практика?

Спасибо!


person medvedNick    schedule 21.06.2012    source источник
comment
3D-движки без инструментов и конвейера ресурсов будут большой проблемой, тем более сложным будет ваш проект. Подумайте о переходе на Unity, которая позаботится обо всех вопросах управления активами.   -  person LearnCocos2D    schedule 23.06.2012
comment
Насколько я понимаю, POD - это закрытый исходный код и проприетарный формат файлов для производителя чипов, который сделал GPU для iphone. Так что, вероятно, инструмент Collada2POD останется основным инструментом преобразования, и часто есть дополнительный шаг преобразования, чтобы вывести Collada из вашего любимого инструмента разработки 3D, а затем перетащить их в XCode. Я надеюсь, что будущее принесет лучшие инструменты.   -  person Tõnu Samuel    schedule 03.08.2012


Ответы (1)


хорошо, может быть, этот ответ будет полезен для кого-то. Я написал несколько скриптов для автоматизации получения 3D-моделей от моих 3D-дизайнеров (они используют Blender). Первый — экспортировать .blend файлы как .dae, он написан на Python, файлы должны находиться в одном каталоге (см. список аргументов в следующих скриптах):

import os
import sys
import glob
import bpy

if len(sys.argv) != 7:
    print("Must provide input and output path")
else:
    for infile in glob.glob(os.path.join(sys.argv[5], '*.blend')):
        bpy.ops.object.select_all(action='SELECT')
        bpy.ops.object.delete()
        bpy.ops.wm.open_mainfile(filepath=infile)
        bpy.ops.object.select_all(action='SELECT')
        bpy.ops.object.transform_apply(location=True,rotation=True,scale=True)
        outfilename = os.path.splitext(os.path.split(infile)[1])[0] + ".dae"
        bpy.ops.wm.collada_export(filepath=os.path.join(sys.argv[6], outfilename),apply_modifiers=True,include_armatures=True,deform_bones_only=True,include_uv_textures=True,include_material_textures=True,active_uv_only=True)

второй — экспортировать эти файлы .dae в .pod с помощью Collada2Pod, это Perl:

#!/usr/bin/perl

my $dir = '/Users/nikita/Develop/model_convertor/dae_models/';
my $out_dir = '/Users/nikita/Develop/model_convertor/pod_models/';
my $collada = '/Users/nikita/Develop/model_convertor/Collada2POD/MacOS_x86_32/Collada2POD';

opendir(DIR, $dir) or die $!;

while (my $file = readdir(DIR)) {

    next if ($file !~ m/\.dae/);

    $out_file = $file;
    $out_file =~ s/dae/pod/g;

    $command = "$collada -i=$dir$file -o=$out_dir$out_file";
    system($command);
}

пример использования:

/Applications/blender.app/Contents/MacOS/blender --background --python /Users/nikita/Develop/model_convertor/exporter.py -- /Users/nikita/Develop/model_convertor/catalog /Users/nikita/Develop/model_convertor/dae_models

perl /Users/nikita/Develop/model_convertor/convertor.pl

где первая команда: "/path/to/blender --background --python /path/to/first/script -- /path/to/blend/files /path/to/dae/files". Вторая команда — это просто выполнение Perl-скрипта. Извините за жесткое кодирование постоянных переменных во втором скрипте :) Надеюсь, это будет кому-то полезно.

Обновление: я добавил функцию transform_apply в первый скрипт, так как были проблемы с моделями без примененных преобразований, из-за чего в выводе были неправильные

person medvedNick    schedule 07.02.2013
comment
Спасибо за код, но после этого формат файла не pod. - person ZYiOS; 04.05.2013
comment
@Dio нет, формат файла - pod. Как видите, первый скрипт экспортирует файл как dae из Blender, а второй скрипт запускает конвертер Collada2Pod, так что формат результата именно тот, что нам нужен — pod. - person medvedNick; 04.05.2013