# each material \r
io.write("Material %d {\r\n" % (len(self.materials)))\r
for m in self.materials:\r
- tex, aplane=bl.material.getTexturePath(m, dirname)\r
- if len(tex):\r
- # textureがある場合は下地を白に\r
- io.write("\"%s\" shader(3) col(1 1 1 1)" % m.name)\r
- else:\r
- # 無い場合はそのまま\r
- io.write(materialToMqo(m))\r
- io.write(tex)\r
- io.write(aplane)\r
+ io.write(materialToMqo(m))\r
+ # ToDo separated alpha texture\r
+ for filename in bl.material.eachTexturePath(m):\r
+ if len(dirname)>0 and filename.startswith(dirname):\r
+ # 相対パスに変換する\r
+ filename=filename[len(dirname)+1:]\r
+ io.write(" tex(\"%s\")" % filename)\r
+ break\r
io.write("\r\n") \r
# end of chunk\r
io.write("}\r\n") \r
print(obj.type)\r
return\r
\r
- ############################################################\r
- # write\r
- ############################################################\r
io.write("Object \""+obj.name+"\" {\r\n")\r
\r
# depth\r
io.write("\tdepth %d\r\n" % info.depth)\r
\r
+ # mirror\r
if bl.modifier.hasType(obj, 'MIRROR'):\r
io.write("\tmirror 1\r\n")\r
io.write("\tmirror_axis 1\r\n")\r
\r
if obj.type.upper()=='MESH':\r
# duplicate and applyMatrix\r
- mesh, dumy=bl.object.duplicate(obj)\r
-\r
- # vertices\r
- io.write("\tvertex %d {\r\n" % len(mesh.verts))\r
- for vert in mesh.verts:\r
- x, y, z = convert_to_mqo(vert.co)\r
- io.write("\t\t%f %f %f\r\n" % \r
- (x*self.scale, y*self.scale, z*self.scale)) # rotate to y-up\r
- io.write("\t}\r\n")\r
-\r
- # faces\r
- io.write("\tface %d {\r\n" % len(mesh.faces))\r
- for i, face in enumerate(mesh.faces):\r
- count=bl.face.getVertexCount(face)\r
- # V\r
- io.write("\t\t%d V(" % count)\r
- for j in reversed(bl.face.getVertices(face)):\r
- io.write("%d " % j)\r
- io.write(")")\r
- # mat\r
- if len(mesh.materials):\r
- io.write(" M(%d)" % \r
- info.material_map[bl.face.getMaterialIndex(face)])\r
- # UV\r
- if bl.mesh.hasUV(mesh) and bl.mesh.hasFaceUV(mesh, i, face):\r
- io.write(" UV(")\r
- for uv in reversed(bl.mesh.getFaceUV(mesh, i, face, count)):\r
- # reverse vertical value\r
- io.write("%f %f " % (uv[0], 1.0-uv[1])) \r
- io.write(")")\r
- io.write("\r\n")\r
- io.write("\t}\r\n") # end of faces\r
-\r
- # 削除する\r
- bl.object.delete(dumy)\r
+ copyMesh, copyObj=bl.object.duplicate(obj)\r
+ # apply transform\r
+ copyObj.scale=obj.scale\r
+ bpy.ops.object.scale_apply()\r
+ copyObj.rotation_euler=obj.rotation_euler\r
+ bpy.ops.object.rotation_apply()\r
+ copyObj.location=obj.location\r
+ bpy.ops.object.location_apply()\r
+ # write mesh\r
+ self.__write_mesh(io, copyMesh, info.material_map)\r
+ bl.object.delete(copyObj)\r
\r
io.write("}\r\n") # end of object\r
\r
+ def __write_mesh(self, io, mesh, material_map):\r
+ # vertices\r
+ io.write("\tvertex %d {\r\n" % len(mesh.verts))\r
+ for vert in mesh.verts:\r
+ x, y, z = convert_to_mqo(vert.co)\r
+ io.write("\t\t%f %f %f\r\n" % \r
+ (x*self.scale, y*self.scale, z*self.scale)) # rotate to y-up\r
+ io.write("\t}\r\n")\r
+\r
+ # faces\r
+ io.write("\tface %d {\r\n" % len(mesh.faces))\r
+ for i, face in enumerate(mesh.faces):\r
+ count=bl.face.getVertexCount(face)\r
+ # V\r
+ io.write("\t\t%d V(" % count)\r
+ for j in reversed(bl.face.getVertices(face)):\r
+ io.write("%d " % j)\r
+ io.write(")")\r
+ # mat\r
+ if len(mesh.materials):\r
+ io.write(" M(%d)" % \r
+ material_map[bl.face.getMaterialIndex(face)])\r
+ # UV\r
+ if bl.mesh.hasUV(mesh) and bl.mesh.hasFaceUV(mesh, i, face):\r
+ io.write(" UV(")\r
+ for uv in reversed(bl.mesh.getFaceUV(mesh, i, face, count)):\r
+ # reverse vertical value\r
+ io.write("%f %f " % (uv[0], 1.0-uv[1])) \r
+ io.write(")")\r
+ io.write("\r\n")\r
+ io.write("\t}\r\n") # end of faces\r
+\r
\r
def __execute(filename, scene, scale=10):\r
if not scene.objects.active:\r