提交 c2a401f2 编写于 作者: A alteredq

Added option not to export materials to Blender exporter.

In such case faces will not get material index in JSON data and then no material reference in Face objects, so MeshFaceMaterial is not going to show anything and you have to add your own material for the whole mesh after loading.

Tested on few models and it seems to work, new JSON format allows to omit materials :)
上级 5a684c29
...@@ -124,6 +124,7 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper): ...@@ -124,6 +124,7 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper):
filename_ext = ".js" filename_ext = ".js"
option_flip_yz = BoolProperty(name="Flip YZ", description="Flip YZ", default=True) option_flip_yz = BoolProperty(name="Flip YZ", description="Flip YZ", default=True)
use_materials = BoolProperty(name="Materials", description="Export materials", default=True)
use_normals = BoolProperty(name="Normals", description="Export normals", default=True) use_normals = BoolProperty(name="Normals", description="Export normals", default=True)
use_colors = BoolProperty(name="Colors", description="Export vertex colors", default=True) use_colors = BoolProperty(name="Colors", description="Export vertex colors", default=True)
use_uv_coords = BoolProperty(name="UVs", description="Export texture coordinates", default=True) use_uv_coords = BoolProperty(name="UVs", description="Export texture coordinates", default=True)
...@@ -167,6 +168,8 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper): ...@@ -167,6 +168,8 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper):
row.prop(self.properties, "use_colors") row.prop(self.properties, "use_colors")
row = layout.row() row = layout.row()
row.prop(self.properties, "use_uv_coords") row.prop(self.properties, "use_uv_coords")
row = layout.row()
row.prop(self.properties, "use_materials")
# ################################################################ # ################################################################
......
...@@ -415,7 +415,7 @@ def setBit(value, position, on): ...@@ -415,7 +415,7 @@ def setBit(value, position, on):
mask = ~(1 << position) mask = ~(1 << position)
return (value & mask) return (value & mask)
def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, flipyz): def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, use_materials, flipyz):
isTriangle = ( len(f.vertices) == 3 ) isTriangle = ( len(f.vertices) == 3 )
if isTriangle: if isTriangle:
...@@ -423,7 +423,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col ...@@ -423,7 +423,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col
else: else:
nVertices = 4 nVertices = 4
hasMaterial = True # for the moment objects without materials get default material hasMaterial = use_materials
hasFaceUvs = False # not supported in Blender hasFaceUvs = False # not supported in Blender
hasFaceVertexUvs = use_uv_coords hasFaceVertexUvs = use_uv_coords
...@@ -459,6 +459,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col ...@@ -459,6 +459,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col
faceData.append(faceType) faceData.append(faceType)
# must clamp in case on polygons bigger than quads # must clamp in case on polygons bigger than quads
for i in range(nVertices): for i in range(nVertices):
index = f.vertices[i] index = f.vertices[i]
faceData.append(index) faceData.append(index)
...@@ -736,7 +737,7 @@ def generate_materials_string(mesh, scene, use_colors, draw_type): ...@@ -736,7 +737,7 @@ def generate_materials_string(mesh, scene, use_colors, draw_type):
# ASCII model generator # ASCII model generator
# ##################################################### # #####################################################
def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model, flipyz, draw_type): def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, draw_type):
vertices = mesh.vertices[:] vertices = mesh.vertices[:]
...@@ -751,6 +752,10 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al ...@@ -751,6 +752,10 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
colors, ncolor = extract_vertex_colors(mesh, use_colors) colors, ncolor = extract_vertex_colors(mesh, use_colors)
uvs, nuv = extract_uvs(mesh, use_uv_coords) uvs, nuv = extract_uvs(mesh, use_uv_coords)
mstring = ""
nmaterial = 0
if use_materials:
mstring, nmaterial = generate_materials_string(mesh, scene, use_colors, draw_type) mstring, nmaterial = generate_materials_string(mesh, scene, use_colors, draw_type)
text = TEMPLATE_FILE_ASCII % { text = TEMPLATE_FILE_ASCII % {
...@@ -769,7 +774,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al ...@@ -769,7 +774,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
"vertices" : ",".join(generate_vertex(v) for v in vertices), "vertices" : ",".join(generate_vertex(v) for v in vertices),
"faces" : ",".join(generate_face(f, i, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, flipyz) for i, f in enumerate(mesh.faces)) "faces" : ",".join(generate_face(f, i, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, use_materials, flipyz) for i, f in enumerate(mesh.faces))
} }
...@@ -780,7 +785,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al ...@@ -780,7 +785,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
# Model exporter - export single mesh # Model exporter - export single mesh
# ##################################################### # #####################################################
def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, align_model, flipyz, export_single_model): def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, export_single_model):
"""Export single mesh""" """Export single mesh"""
...@@ -823,7 +828,7 @@ def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, al ...@@ -823,7 +828,7 @@ def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, al
if not active_col_layer: if not active_col_layer:
use_colors = False use_colors = False
text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model, flipyz, obj.draw_type) text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, obj.draw_type)
write_file(filepath, text) write_file(filepath, text)
# remove temp mesh # remove temp mesh
...@@ -1250,7 +1255,7 @@ def export_scene(scene, filepath, flipyz): ...@@ -1250,7 +1255,7 @@ def export_scene(scene, filepath, flipyz):
# Main # Main
# ##################################################### # #####################################################
def save(operator, context, filepath = "", option_flip_yz = True, use_normals = True, use_colors = True, use_uv_coords = True, align_model = 0, option_export_scene = True): def save(operator, context, filepath = "", option_flip_yz = True, use_normals = True, use_colors = True, use_uv_coords = True, use_materials = True, align_model = 0, option_export_scene = True):
filepath = ensure_extension(filepath, '.js') filepath = ensure_extension(filepath, '.js')
...@@ -1281,7 +1286,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals = ...@@ -1281,7 +1286,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals =
if name not in geo_set: if name not in geo_set:
fname = generate_mesh_filename(name, filepath) fname = generate_mesh_filename(name, filepath)
export_mesh(obj, scene, fname, use_normals, use_colors, use_uv_coords, 0, option_flip_yz, False) export_mesh(obj, scene, fname, use_normals, use_colors, use_uv_coords, use_materials, 0, option_flip_yz, False)
geo_set.add(name) geo_set.add(name)
...@@ -1291,7 +1296,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals = ...@@ -1291,7 +1296,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals =
if not obj: if not obj:
raise Exception("Error, Select 1 active object or select 'export scene'") raise Exception("Error, Select 1 active object or select 'export scene'")
export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, align_model, option_flip_yz, True) export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, use_materials, align_model, option_flip_yz, True)
return {'FINISHED'} return {'FINISHED'}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册