在cocos3d中加载3d模型

时间:2012-06-21 22:06:17

标签: ios cocos3d 3d-model

我是cocos3d的新手,我已经阅读了有关将3d模型加载到cocos3d的一些信息。正如我所理解的,在cocos3d中添加3d模型的本地方法是将从Blender或3DsMax获得的模型转换为通过转换器的POD格式。难道不是有点困难吗?在我的应用程序中,我可以很容易地做到这一点,因为我的模型很少,但我认为我正在编写一个包含数百或数千个模型的大型游戏,我应该这样做吗?转换我拥有的每个型号?这是一个好习惯吗?

谢谢!

1 个答案:

答案 0 :(得分: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函数添加到第一个脚本中,因为没有应用变换的模型存在问题,导致输出中出现错误