Показать сообщение отдельно
Старый 13.10.2016, 01:01
Сергей1234 вне форума Посмотреть профиль Отправить личное сообщение для Сергей1234 Найти все сообщения от Сергей1234
  № 17  
Сергей1234

Регистрация: Sep 2016
Сообщений: 14
Код AS3:
        private function buildMesh(_arg1:Mesh, _arg2:ObjectData, _arg3:AnimationData, _arg4:Number):void{
            var _local9:int;
            var _local10:int;
            var _local11:Face;
            var _local12:Vertex;
            var _local14:int;
            var _local16:Number;
            var _local17:Number;
            var _local18:Number;
            var _local19:Number;
            var _local20:Number;
            var _local21:Number;
            var _local22:Number;
            var _local23:Number;
            var _local24:Number;
            var _local25:Number;
            var _local26:Number;
            var _local27:Number;
            var _local28:Number;
            var _local29:Boolean;
            var _local30:Number;
            var _local31:Number;
            var _local32:Number;
            var _local33:Face;
            var _local34:String;
            var _local35:Vector.<int>;
            var _local36:MaterialData;
            var _local37:Material;
            var _local38:Wrapper;
            var _local39:Number;
            var _local40:Number;
            var _local5:Vector.<Vertex> = new Vector.<Vertex>();
            var _local6:Vector.<Face> = new Vector.<Face>();
            var _local7:int;
            var _local8:int;
            var _local13:Boolean;
            if (_arg3 != null){
                _local16 = _arg2.a;
                _local17 = _arg2.b;
                _local18 = _arg2.c;
                _local19 = _arg2.d;
                _local20 = _arg2.e;
                _local21 = _arg2.f;
                _local22 = _arg2.g;
                _local23 = _arg2.h;
                _local24 = _arg2.i;
                _local25 = _arg2.j;
                _local26 = _arg2.k;
                _local27 = _arg2.l;
                _local28 = (1 / (((((((-(_local18) * _local21) * _local24) + ((_local17 * _local22) * _local24)) + ((_local18 * _local20) * _local25)) - ((_local16 * _local22) * _local25)) - ((_local17 * _local20) * _local26)) + ((_local16 * _local21) * _local26)));
                _arg2.a = (((-(_local22) * _local25) + (_local21 * _local26)) * _local28);
                _arg2.b = (((_local18 * _local25) - (_local17 * _local26)) * _local28);
                _arg2.c = (((-(_local18) * _local21) + (_local17 * _local22)) * _local28);
                _arg2.d = ((((((((_local19 * _local22) * _local25) - ((_local18 * _local23) * _local25)) - ((_local19 * _local21) * _local26)) + ((_local17 * _local23) * _local26)) + ((_local18 * _local21) * _local27)) - ((_local17 * _local22) * _local27)) * _local28);
                _arg2.e = (((_local22 * _local24) - (_local20 * _local26)) * _local28);
                _arg2.f = (((-(_local18) * _local24) + (_local16 * _local26)) * _local28);
                _arg2.g = (((_local18 * _local20) - (_local16 * _local22)) * _local28);
                _arg2.h = ((((((((_local18 * _local23) * _local24) - ((_local19 * _local22) * _local24)) + ((_local19 * _local20) * _local26)) - ((_local16 * _local23) * _local26)) - ((_local18 * _local20) * _local27)) + ((_local16 * _local22) * _local27)) * _local28);
                _arg2.i = (((-(_local21) * _local24) + (_local20 * _local25)) * _local28);
                _arg2.j = (((_local17 * _local24) - (_local16 * _local25)) * _local28);
                _arg2.k = (((-(_local17) * _local20) + (_local16 * _local21)) * _local28);
                _arg2.l = ((((((((_local19 * _local21) * _local24) - ((_local17 * _local23) * _local24)) - ((_local19 * _local20) * _local25)) + ((_local16 * _local23) * _local25)) + ((_local17 * _local20) * _local27)) - ((_local16 * _local21) * _local27)) * _local28);
                if (_arg3.pivot != null){
                    _arg2.d = (_arg2.d - _arg3.pivot.x);
                    _arg2.h = (_arg2.h - _arg3.pivot.y);
                    _arg2.l = (_arg2.l - _arg3.pivot.z);
                };
                _local13 = true;
            };
            if (_arg2.vertices != null){
                _local29 = ((!((_arg2.uvs == null))) && ((_arg2.uvs.length > 0)));
                _local9 = 0;
                _local10 = 0;
                _local14 = _arg2.vertices.length;
                while (_local9 < _local14) {
                    _local12 = new Vertex();
                    if (_local13){
                        var _temp1 = _local9;
                        _local9 = (_local9 + 1);
                        _local30 = _arg2.vertices[_temp1];
                        var _temp2 = _local9;
                        _local9 = (_local9 + 1);
                        _local31 = _arg2.vertices[_temp2];
                        var _temp3 = _local9;
                        _local9 = (_local9 + 1);
                        _local32 = _arg2.vertices[_temp3];
                        _local12.x = ((((_arg2.a * _local30) + (_arg2.b * _local31)) + (_arg2.c * _local32)) + _arg2.d);
                        _local12.y = ((((_arg2.e * _local30) + (_arg2.f * _local31)) + (_arg2.g * _local32)) + _arg2.h);
                        _local12.z = ((((_arg2.i * _local30) + (_arg2.j * _local31)) + (_arg2.k * _local32)) + _arg2.l);
                    } else {
                        var _temp4 = _local9;
                        _local9 = (_local9 + 1);
                        _local12.x = _arg2.vertices[_temp4];
                        var _temp5 = _local9;
                        _local9 = (_local9 + 1);
                        _local12.y = _arg2.vertices[_temp5];
                        var _temp6 = _local9;
                        _local9 = (_local9 + 1);
                        _local12.z = _arg2.vertices[_temp6];
                    };
                    _local12.x = (_local12.x * _arg4);
                    _local12.y = (_local12.y * _arg4);
                    _local12.z = (_local12.z * _arg4);
                    if (_local29){
                        var _temp7 = _local10;
                        _local10 = (_local10 + 1);
                        _local12.u = _arg2.uvs[_temp7];
                        var _temp8 = _local10;
                        _local10 = (_local10 + 1);
                        _local12.v = (1 - _arg2.uvs[_temp8]);
                    };
                    _local12.transformId = -1;
                    var _temp9 = _local7;
                    _local7 = (_local7 + 1);
                    var _local41 = _temp9;
                    _local5[_local41] = _local12;
                    _local12.next = _arg1.vertexList;
                    _arg1.vertexList = _local12;
                };
            };
            if (_arg2.faces != null){
                _local9 = 0;
                _local14 = _arg2.faces.length;
                while (_local9 < _local14) {
                    _local11 = new Face();
                    _local11.wrapper = new Wrapper();
                    _local11.wrapper.next = new Wrapper();
                    _local11.wrapper.next.next = new Wrapper();
                    var _temp10 = _local9;
                    _local9 = (_local9 + 1);
                    _local11.wrapper.vertex = _local5[_arg2.faces[_temp10]];
                    var _temp11 = _local9;
                    _local9 = (_local9 + 1);
                    _local11.wrapper.next.vertex = _local5[_arg2.faces[_temp11]];
                    var _temp12 = _local9;
                    _local9 = (_local9 + 1);
                    _local11.wrapper.next.next.vertex = _local5[_arg2.faces[_temp12]];
                    var _temp13 = _local8;
                    _local8 = (_local8 + 1);
                    _local41 = _temp13;
                    _local6[_local41] = _local11;
                    if (_local33 != null){
                        _local33.next = _local11;
                    } else {
                        _arg1.faceList = _local11;
                    };
                    _local33 = _local11;
                };
            };
            if (_arg2.surfaces != null){
                for (_local34 in _arg2.surfaces) {
                    _local35 = _arg2.surfaces[_local34];
                    _local36 = this.materialDatas[_local34];
                    _local37 = _local36.material;
                    _local9 = 0;
                    while (_local9 < _local35.length) {
                        _local11 = _local6[_local35[_local9]];
                        _local11.material = _local37;
                        if (_local36.matrix != null){
                            _local38 = _local11.wrapper;
                            while (_local38 != null) {
                                _local12 = _local38.vertex;
                                if (_local12.transformId < 0){
                                    _local39 = _local12.u;
                                    _local40 = _local12.v;
                                    _local12.u = (((_local36.matrix.a * _local39) + (_local36.matrix.b * _local40)) + _local36.matrix.tx);
                                    _local12.v = (((_local36.matrix.c * _local39) + (_local36.matrix.d * _local40)) + _local36.matrix.ty);
                                    _local12.transformId = 0;
                                };
                                _local38 = _local38.next;
                            };
                        };
                        _local9++;
                    };
                };
            };
            var _local15:FillMaterial = new FillMaterial(0x7F7F7F);
            _local15.name = "default";
            _local11 = _arg1.faceList;
            while (_local11 != null) {
                if (_local11.material == null){
                    _local11.material = _local15;
                };
                _local11 = _local11.next;
            };
            _arg1.calculateFacesNormals(true);
            _arg1.calculateBounds();
        }
 
        private function parseUVs(_arg1:ObjectData):void{
            var _local2:int = this.data.readUnsignedShort();
            _arg1.uvs = new Vector.<Number>();
            var _local3:int;
            var _local4:int;
            while (_local3 < _local2) {
                var _temp1 = _local4;
                _local4 = (_local4 + 1);
                var _local5 = _temp1;
                _arg1.uvs[_local5] = this.data.readFloat();
                var _temp2 = _local4;
                _local4 = (_local4 + 1);
                var _local6 = _temp2;
                _arg1.uvs[_local6] = this.data.readFloat();
                _local3++;
            };
        }
 
      private function parseObject(chunkInfo:ChunkInfo) : void
      {
         if(this.objectDatas == null)
         {
            this.objectDatas = new Object();
         }
         var object:ObjectData = new ObjectData();
         object.name = this.getString(chunkInfo.dataPosition);
         this.objectDatas[object.name] = object;
         var offset:int = object.name.length + 1;
         this.parseObjectChunk(object,chunkInfo.dataPosition + offset,chunkInfo.dataSize - offset);
      }
 
        private function parse3DChunk(_arg1:int, _arg2:int):void{
            var _local3:ChunkInfo;
            var _local4:MaterialData;
            while (_arg2 >= 6) {
                _local3 = this.readChunkInfo(_arg1);
                switch (_local3.id){
                    case CHUNK_MATERIAL:
                        _local4 = new MaterialData();
                        this.parseMaterialChunk(_local4, _local3.dataPosition, _local3.dataSize);
                        break;
                    case CHUNK_OBJECT:
                        this.parseObject(_local3);
                        break;
                };
                _arg1 = _local3.nextChunkPosition;
                _arg2 = (_arg2 - _local3.size);
            };
        }
 
      private function buildContent(texturesBaseURL:String, scale:Number) : void
      {
         var materialName:* = null;
         var objectName:* = null;
         var objectData:* = null;
         var object:* = null;
         var materialData:* = null;
         var mapData:* = null;
         var materialMatrix:* = null;
         var rot:Number = NaN;
         var textureMaterial:* = null;
         var fillMaterial:* = null;
         var i:int = 0;
         var length:int = 0;
         var animationData:* = null;
         var j:int = 0;
         var nameCounter:int = 0;
         var animationData2:* = null;
         var newObjectData:* = null;
         var newName:* = null;
         for(materialName in this.materialDatas)
         {
            materialData = this.materialDatas[materialName];
            mapData = materialData.diffuseMap;
            if(mapData != null)
            {
               materialMatrix = new Matrix();
               rot = mapData.rotation * Math.PI / 180;
               materialMatrix.translate(-mapData.offsetU,mapData.offsetV);
               materialMatrix.translate(-0.5,-0.5);
               materialMatrix.rotate(-rot);
               materialMatrix.scale(mapData.scaleU,mapData.scaleV);
               materialMatrix.translate(0.5,0.5);
               materialData.matrix = materialMatrix;
               textureMaterial = new TextureMaterial();
               textureMaterial.name = materialName;
               textureMaterial.diffuseMapURL = texturesBaseURL + mapData.filename;
               textureMaterial.opacityMapURL = materialData.opacityMap != null?texturesBaseURL + materialData.opacityMap.filename:null;
               materialData.material = textureMaterial;
               textureMaterial.name = materialData.name;
               this.textureMaterials.push(textureMaterial);
            }
            else
            {
               fillMaterial = new FillMaterial(materialData.color);
               materialData.material = fillMaterial;
               fillMaterial.name = materialData.name;
            }
            this.materials.push(materialData.material);
         }
         if(this.animationDatas != null)
         {
            if(this.objectDatas != null)
            {
               length = this.animationDatas.length;
               for(i = 0; i < length; )
               {
                  animationData = this.animationDatas[i];
                  objectName = animationData.objectName;
                  objectData = this.objectDatas[objectName];
                  if(objectData != null)
                  {
                     for(j = i + 1,nameCounter = 1; j < length; )
                     {
                        animationData2 = this.animationDatas[j];
                        if(!animationData2.isInstance && objectName == animationData2.objectName)
                        {
                           newObjectData = new ObjectData();
                           newName = objectName + nameCounter++;
                           newObjectData.name = newName;
                           this.objectDatas[newName] = newObjectData;
                           animationData2.objectName = newName;
                           newObjectData.vertices = objectData.vertices;
                           newObjectData.uvs = objectData.uvs;
                           newObjectData.faces = objectData.faces;
                           newObjectData.surfaces = objectData.surfaces;
                           newObjectData.a = objectData.a;
                           newObjectData.b = objectData.b;
                           newObjectData.c = objectData.c;
                           newObjectData.d = objectData.d;
                           newObjectData.e = objectData.e;
                           newObjectData.f = objectData.f;
                           newObjectData.g = objectData.g;
                           newObjectData.h = objectData.h;
                           newObjectData.i = objectData.i;
                           newObjectData.j = objectData.j;
                           newObjectData.k = objectData.k;
                           newObjectData.l = objectData.l;
                        }
                        j++;
                     }
                  }
                  if(objectData != null && objectData.vertices != null)
                  {
                     object = new Mesh();
                     this.buildMesh(object as Mesh,objectData,animationData,scale);
                  }
                  else
                  {
                     object = new Object3D();
                  }
                  object.name = objectName;
                  animationData.object = object;
                  if(animationData.position != null)
                  {
                     object.x = animationData.position.x * scale;
                     object.y = animationData.position.y * scale;
                     object.z = animationData.position.z * scale;
                  }
                  if(animationData.rotation != null)
                  {
                     object.rotationX = animationData.rotation.x;
                     object.rotationY = animationData.rotation.y;
                     object.rotationZ = animationData.rotation.z;
                  }
                  if(animationData.scale != null)
                  {
                     object.scaleX = animationData.scale.x;
                     object.scaleY = animationData.scale.y;
                     object.scaleZ = animationData.scale.z;
                  }
                  i++;
               }
               for(i = 0; i < length; i++)
               {
                  animationData = this.animationDatas[i];
                  this.objects.push(animationData.object);
                  this.parents.push(animationData.parentIndex == 65535?null:AnimationData(this.animationDatas[animationData.parentIndex]).object);
               }
            }
         }
         else
         {
            for(objectName in this.objectDatas)
            {
               objectData = this.objectDatas[objectName];
               if(objectData.vertices != null)
               {
                  object = new Mesh();
                  object.name = objectName;
                  this.buildMesh(object as Mesh,objectData,null,scale);
                  this.objects.push(object);
                  this.parents.push(null);
               }
            }
         }
      }