1

我是 cocos3d 的新手,我已经阅读了一些关于将 3d 模型加载到 cocos3d 中的信息。据我了解,在 cocos3d 中添加 3d 模型的原生方式是通过转换器将来自 Blender 或 3DsMax 的模型转换为 POD 格式。是不是好像有点难?在我的应用程序中,我可以轻松做到这一点,因为我只有几个模型,但假设我正在编写一个包含数百或数千个模型的大型游戏,我应该这样做吗?转换我拥有的每个模型?这是一个好习惯吗?

谢谢!

4

1 回答 1

0

好的,也许这个答案对某人有用。我编写了一些脚本来自动从我的 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)

第二个是使用 Collada2Pod 将这些 .dae 文件导出到 .pod,这是 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第一个脚本中添加了函数,因为没有应用转换的模型存在问题,导致输出错误

于 2013-02-07T07:45:21.783 回答