Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-01-07 05:39:48 +0300
committerCampbell Barton <ideasman42@gmail.com>2011-01-07 05:39:48 +0300
commite14247d0797bc202f6be6d25615a47a415c2b45d (patch)
tree3ae9415634dca6c8705e1e8d7aab2e1a5866a1f3
parentaf647654566968841785b7804b5b10d7128f6d0a (diff)
bugfix [#25522] Export to X3D is missing ImageTexture and TextureTransform for plane with image texture
- tile option was broken. - added basic export of texture/mtex transformation. - recent mesh update broke material/image export with no UVs
-rw-r--r--release/scripts/op/io_scene_x3d/export_x3d.py43
1 files changed, 35 insertions, 8 deletions
diff --git a/release/scripts/op/io_scene_x3d/export_x3d.py b/release/scripts/op/io_scene_x3d/export_x3d.py
index 81bbf3185b0..f6e3819216a 100644
--- a/release/scripts/op/io_scene_x3d/export_x3d.py
+++ b/release/scripts/op/io_scene_x3d/export_x3d.py
@@ -63,7 +63,6 @@ class x3d_class:
self.billnode = 0
self.halonode = 0
self.collnode = 0
- self.tilenode = 0
self.verbose = 2 # level of verbosity in console 0-none, 1-some, 2-most
self.cp = 3 # decimals for material color values 0.000 - 1.000
self.vp = 3 # decimals for vertex coordinate values 0.000 - n.000
@@ -307,9 +306,6 @@ class x3d_class:
# elif mode & Mesh.FaceModes.BILLBOARD and self.billnode == 0:
self.write_indented("<Billboard axisOfRotation=\"0 1 0\">\n", 1)
self.billnode = 1
- # TF_TILES is marked as deprecated in DNA_meshdata_types.h
- # elif mode & Mesh.FaceModes.TILES and self.tilenode == 0:
- # self.tilenode = 1
elif 'COLLISION' not in mode and self.collnode == 0:
# elif not mode & Mesh.FaceModes.DYNAMIC and self.collnode == 0:
self.write_indented("<Collision enabled=\"false\">\n", 1)
@@ -339,7 +335,10 @@ class x3d_class:
if not mesh_materials:
mesh_materials = [None]
+ mesh_material_tex = [None] * len(mesh_materials)
+ mesh_material_mtex = [None] * len(mesh_materials)
mesh_material_images = [None] * len(mesh_materials)
+
for i, material in enumerate(mesh_materials):
if material:
for mtex in material.texture_slots:
@@ -348,6 +347,8 @@ class x3d_class:
if tex and tex.type == 'IMAGE':
image = tex.image
if image:
+ mesh_material_tex[i] = tex
+ mesh_material_mtex[i] = mtex
mesh_material_images[i] = image
break
@@ -355,10 +356,13 @@ class x3d_class:
mesh_faces = mesh.faces[:]
mesh_faces_materials = [f.material_index for f in mesh_faces]
-
+
if is_uv and True in mesh_materials_use_face_texture:
mesh_faces_image = [(fuv.image if (mesh_materials_use_face_texture[mesh_faces_materials[i]] and fuv.use_image) else mesh_material_images[mesh_faces_materials[i]]) for i, fuv in enumerate(mesh.uv_textures.active.data)]
mesh_faces_image_unique = set(mesh_faces_image)
+ elif len(set(mesh_material_images) | {None}) > 1: # make sure there is at least one image
+ mesh_faces_image = [mesh_material_images[material_index] for material_index in mesh_faces_materials]
+ mesh_faces_image_unique = set(mesh_faces_image)
else:
mesh_faces_image = [None] * len(mesh_faces)
mesh_faces_image_unique = {None}
@@ -391,9 +395,32 @@ class x3d_class:
self.write_indented("<Appearance>\n", 1)
self.writeImageTexture(image)
- if self.tilenode == 1:
- self.write_indented("<TextureTransform scale=\"%s %s\" />\n" % (image.xrep, image.yrep))
- self.tilenode = 0
+ if mesh_materials_use_face_texture[material_index]:
+ if image.use_tile:
+ self.write_indented("<TextureTransform scale=\"%s %s\" />\n" % (image.tiles_x, image.tiles_y))
+ else:
+ # transform by mtex
+ loc = mesh_material_mtex[material_index].offset[:2]
+
+ # mtex_scale * tex_repeat
+ sca_x, sca_y = mesh_material_mtex[material_index].scale[:2]
+
+ sca_x *= mesh_material_tex[material_index].repeat_x
+ sca_y *= mesh_material_tex[material_index].repeat_y
+
+ # flip x/y is a sampling feature, convert to transform
+ if mesh_material_tex[material_index].use_flip_axis:
+ rot = math.pi / -2.0
+ sca_x, sca_y = sca_y, -sca_x
+ else:
+ rot = 0.0
+
+ self.write_indented("<TextureTransform ", 1)
+ # fw("center=\"%.6f %.6f\" " % (0.0, 0.0))
+ fw("translation=\"%.6f %.6f\" " % loc)
+ fw("scale=\"%.6f %.6f\" " % (sca_x, sca_y))
+ fw("rotation=\"%.6f\" " % rot)
+ fw("/>\n")
self.write_indented("</Appearance>\n", -1)