我是cocos3d的新手,我已经阅读了有关将3d模型加载到cocos3d的一些信息。正如我所理解的,在cocos3d中添加3d模型的本地方法是将从Blender或3DsMax获得的模型转换为通过转换器的POD格式。难道不是有点困难吗?在我的应用程序中,我可以很容易地做到这一点,因为我的模型很少,但我认为我正在编写一个包含数百或数千个模型的大型游戏,我应该这样做吗?转换我拥有的每个型号?这是一个好习惯吗?
谢谢!
答案 0 :(得分:0)
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
函数添加到第一个脚本中,因为没有应用变换的模型存在问题,导致输出中出现错误