Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package {
- import flash.display.Sprite;
- import away3d.containers.ObjectContainer3D;
- import away3d.entities.Mesh;
- import away3d.tools.MeshHelper;
- import away3d.tools.Merge;
- /**
- * ...
- * @author Richman Stewart
- */
- public class MergeObjects extends Sprite {
- //merge variables
- public static var mergeTool:Merge = new Merge();
- public function MergeObjects():void {
- }
- public static function mergeContainer(container:ObjectContainer3D):void {
- var lib:Object = { };
- var mesh:Mesh;
- var srcMesh:Mesh;
- var meshList:Vector.<Mesh>;
- var i:int;
- var count:int = container.numChildren;
- // browse meshes in container and store them
- // by their material name
- for (i = 0; i < count; i++) {
- mesh = container.getChildAt(i) as Mesh;
- if (mesh == null) continue;
- if (lib[mesh.material.name] == null) {
- lib[mesh.material.name] = new Vector.<Mesh>();
- }
- lib[mesh.material.name].push(mesh);
- }
- // now merge meshes per material
- for each (meshList in lib) {
- srcMesh = meshList.shift();
- if (meshList.length > 0) {
- mesh = new Mesh(srcMesh.geometry.clone(), srcMesh.material);
- mesh.castsShadows = srcMesh.castsShadows;
- container.addChild(mesh);
- mesh.rotationX = srcMesh.rotationX;
- mesh.rotationY = srcMesh.rotationY;
- mesh.rotationZ = srcMesh.rotationZ;
- mesh.x = srcMesh.x;
- mesh.y = srcMesh.y;
- mesh.z = srcMesh.z;
- MeshHelper.applyRotations(mesh);
- MeshHelper.applyScales(mesh, srcMesh.scaleX, srcMesh.scaleY, srcMesh.scaleZ);
- MeshHelper.applyPosition(mesh, srcMesh.x, srcMesh.y, srcMesh.z);
- _mergeTool.applyToMeshes(mesh, meshList);
- for each (mesh in meshList) {
- container.removeChild(mesh);
- mesh.dispose();
- }
- container.removeChild(srcMesh);
- srcMesh.dispose();
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment