* added a bindpose (3ds max was complaining)

* export materials emit value
This commit is contained in:
Campbell Barton 2007-08-29 05:42:39 +00:00
parent 1b22a628f2
commit 1d43cae37b

@ -495,6 +495,8 @@ def write(filename, batch_objects = None, \
file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime) file.write('\nCreationTime: "%.4i-%.2i-%.2i %.2i:%.2i:%.2i:000"' % curtime)
file.write('\nCreator: "Blender3D version %.2f"' % Blender.Get('version')) file.write('\nCreator: "Blender3D version %.2f"' % Blender.Get('version'))
pose_items = [] # list of (fbxName, matrix) to write pose data for, easier to collect allong the way
# --------------- funcs for exporting # --------------- funcs for exporting
def object_tx(ob, loc, matrix, matrix_mod = None): def object_tx(ob, loc, matrix, matrix_mod = None):
''' '''
@ -656,7 +658,9 @@ def write(filename, batch_objects = None, \
file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName) file.write('\n\tModel: "Model::%s", "Limb" {' % my_bone.fbxName)
file.write('\n\t\tVersion: 232') file.write('\n\t\tVersion: 232')
write_object_props(my_bone.blenBone, None, None, my_bone.fbxArm.matrixWorld) poseMatrix = write_object_props(my_bone.blenBone, None, None, my_bone.fbxArm.matrixWorld)[3]
pose_items.append( (my_bone.fbxName, poseMatrix) )
# file.write('\n\t\t\tProperty: "Size", "double", "",%.6f' % ((my_bone.blenData.head['ARMATURESPACE'] - my_bone.blenData.tail['ARMATURESPACE']) * my_bone.fbxArm.matrixWorld).length) # file.write('\n\t\t\tProperty: "Size", "double", "",%.6f' % ((my_bone.blenData.head['ARMATURESPACE'] - my_bone.blenData.tail['ARMATURESPACE']) * my_bone.fbxArm.matrixWorld).length)
file.write('\n\t\t\tProperty: "Size", "double", "",1') file.write('\n\t\t\tProperty: "Size", "double", "",1')
@ -994,11 +998,13 @@ def write(filename, batch_objects = None, \
# only use this for the root matrix at the moment # only use this for the root matrix at the moment
if matrixOnly: if matrixOnly:
write_object_props(None, None, matrixOnly) poseMatrix = write_object_props(None, None, matrixOnly)[3]
else: # all other Null's else: # all other Null's
if my_null: write_object_props(my_null.blenObject) if my_null: poseMatrix = write_object_props(my_null.blenObject)[3]
else: write_object_props() else: poseMatrix = write_object_props()[3]
pose_items.append((fbxName, poseMatrix))
file.write(''' file.write('''
} }
@ -1028,6 +1034,7 @@ def write(filename, batch_objects = None, \
mat_hard = (float(mat.hard)-1)/5.10 mat_hard = (float(mat.hard)-1)/5.10
mat_spec = mat.spec/2.0 mat_spec = mat.spec/2.0
mat_alpha = mat.alpha mat_alpha = mat.alpha
mat_emit = mat.emit
mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS mat_shadeless = mat.mode & Blender.Material.Modes.SHADELESS
if mat_shadeless: if mat_shadeless:
mat_shader = 'Lambert' mat_shader = 'Lambert'
@ -1045,6 +1052,7 @@ def write(filename, batch_objects = None, \
mat_hard = 20.0 mat_hard = 20.0
mat_spec = 0.2 mat_spec = 0.2
mat_alpha = 1.0 mat_alpha = 1.0
mat_emit = 0.0
mat_shadeless = False mat_shadeless = False
mat_shader = 'Phong' mat_shader = 'Phong'
@ -1055,19 +1063,19 @@ def write(filename, batch_objects = None, \
file.write('\n\t\tProperties60: {') file.write('\n\t\tProperties60: {')
file.write('\n\t\t\tProperty: "ShadingModel", "KString", "", "%s"' % mat_shader) file.write('\n\t\t\tProperty: "ShadingModel", "KString", "", "%s"' % mat_shader)
file.write('\n\t\t\tProperty: "MultiLayer", "bool", "",0') file.write('\n\t\t\tProperty: "MultiLayer", "bool", "",0')
file.write('\n\t\t\tProperty: "EmissiveColor", "ColorRGB", "",0,0,0') file.write('\n\t\t\tProperty: "EmissiveColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold) # emit and diffuse color are he same in blender
file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",1') file.write('\n\t\t\tProperty: "EmissiveFactor", "double", "",%.4f' % mat_dif)
file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_colamb) file.write('\n\t\t\tProperty: "AmbientColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_colamb)
file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.1f' % mat_amb) file.write('\n\t\t\tProperty: "AmbientFactor", "double", "",%.4f' % mat_amb)
file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cold) file.write('\n\t\t\tProperty: "DiffuseColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cold)
file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.1f' % mat_dif) file.write('\n\t\t\tProperty: "DiffuseFactor", "double", "",%.4f' % mat_emit)
file.write('\n\t\t\tProperty: "Bump", "Vector3D", "",0,0,0') file.write('\n\t\t\tProperty: "Bump", "Vector3D", "",0,0,0')
file.write('\n\t\t\tProperty: "TransparentColor", "ColorRGB", "",1,1,1') file.write('\n\t\t\tProperty: "TransparentColor", "ColorRGB", "",1,1,1')
file.write('\n\t\t\tProperty: "TransparencyFactor", "double", "",0') file.write('\n\t\t\tProperty: "TransparencyFactor", "double", "",%.4f' % (1.0 - mat_alpha))
if not mat_shadeless: if not mat_shadeless:
file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.1f,%.1f,%.1f' % mat_cols) file.write('\n\t\t\tProperty: "SpecularColor", "ColorRGB", "",%.4f,%.4f,%.4f' % mat_cols)
file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.1f' % mat_spec) file.write('\n\t\t\tProperty: "SpecularFactor", "double", "",%.4f' % mat_spec)
file.write('\n\t\t\tProperty: "ShininessExponent", "double", "",80.0') file.write('\n\t\t\tProperty: "ShininessExponent", "double", "",80.0')
file.write('\n\t\t\tProperty: "ReflectionColor", "ColorRGB", "",0,0,0') file.write('\n\t\t\tProperty: "ReflectionColor", "ColorRGB", "",0,0,0')
file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1') file.write('\n\t\t\tProperty: "ReflectionFactor", "double", "",1')
@ -1965,12 +1973,12 @@ Definitions: {
del tmp del tmp
# we could avoid writing this possibly but for now just write it # we could avoid writing this possibly but for now just write it
"""
file.write(''' file.write('''
ObjectType: "Pose" { ObjectType: "Pose" {
Count: 1 Count: 1
}''') }''')
"""
file.write(''' file.write('''
ObjectType: "GlobalSettings" { ObjectType: "GlobalSettings" {
@ -2045,7 +2053,7 @@ Objects: {''')
# Write pose's really weired, only needed when an armature and mesh are used together # Write pose's really weired, only needed when an armature and mesh are used together
# each by themselves dont need pose data. for now only pose meshes and bones # each by themselves dont need pose data. for now only pose meshes and bones
"""
file.write(''' file.write('''
Pose: "Pose::BIND_POSES", "BindPose" { Pose: "Pose::BIND_POSES", "BindPose" {
Type: "BindPose" Type: "BindPose"
@ -2053,21 +2061,17 @@ Objects: {''')
Properties60: { Properties60: {
} }
NbPoseNodes: ''') NbPoseNodes: ''')
file.write(str(len(pose_items)))
file.write(str(\
len(ob_meshes)+\
len(ob_bones)
))
for tmp in (ob_meshes, ob_bones): for fbxName, matrix in pose_items:
for ob in tmp:
file.write('\n\t\tPoseNode: {') file.write('\n\t\tPoseNode: {')
file.write('\n\t\t\tNode: "Model::%s"' % ob[0] ) # the first item is the fbx-name file.write('\n\t\t\tNode: "Model::%s"' % fbxName )
file.write('\n\t\t\tMatrix: %s' % mat4x4str(object_tx(ob[1], None, None)[3])) # second item is the object or bone if matrix: file.write('\n\t\t\tMatrix: %s' % mat4x4str(matrix))
else: file.write('\n\t\t\tMatrix: %s' % mat4x4str(Matrix()))
file.write('\n\t\t}') file.write('\n\t\t}')
file.write('\n\t}') file.write('\n\t}')
"""
# Finish Writing Objects # Finish Writing Objects