Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Та самая ошибка 1009 (http://www.flasher.ru/forum/showthread.php?t=213306)

dimarik 10.09.2016 16:47

Все мы ходим или ходили под старлингом. А Даниелька да, с абстракцией и кэшированием подружился и выкатил версию старлинг 2.0.

Сергей1234 17.09.2016 16:23

Помогите переработать класс!

dimarik 17.09.2016 16:26

Ну давац поможим, выкладывацй классс

caseyryan 17.09.2016 20:42

Цитата:

Сообщение от Сергей1234 (Сообщение 1196209)
Помогите переработать класс!

recycle?)
Какой класс то? Из закрытой либы что ли?

Eric Gurt 19.09.2016 12:50

Цитата:

Сообщение от Сергей1234 (Сообщение 1196209)
Помогите переработать класс!

Если что-то "лагает" то можно использовать SWFScoutEnabler и Adobe Scout CC для того чтобы посмотреть что именно "лагает" и выполняется дольше обычного.

Сергей1234 13.10.2016 00:59

Код AS3:

package alternativa.engine3d.loaders
{
  import flash.geom.Vector3D;
  import alternativa.engine3d.alternativa3d;
  import alternativa.engine3d.core.Object3D;
  import alternativa.engine3d.materials.TextureMaterial;
  import alternativa.engine3d.objects.Mesh;
  import alternativa.engine3d.core.Face;
  import alternativa.engine3d.core.Vertex;
  import alternativa.engine3d.materials.Material;
  import alternativa.engine3d.core.Wrapper;
  import alternativa.engine3d.materials.FillMaterial;
  import flash.utils.ByteArray;
  import flash.geom.Matrix;
  import flash.utils.Endian;
 
  use namespace alternativa3d;
 
  public class Parser3DS
  {
 
      private static const CHUNK_MAPPINGCOORDS:int = 16704;
 
      private static const CHUNK_VERTICES:int = 16656;
 
      private static const CHUNK_TRIMESH:int = 16640;
 
      private static const CHUNK_TRANSFORMATION:int = 16736;
 
      private static const CHUNK_MAIN:int = 19789;
 
      private static const CHUNK_VERSION:int = 2;
 
      private static const CHUNK_OBJECT:int = 16384;
 
      private static const CHUNK_ANIMATION:int = 45056;
 
      private static const CHUNK_FACESMATERIAL:int = 16688;
 
      private static const CHUNK_MATERIAL:int = 45055;
 
      private static const CHUNK_SCENE:int = 15677;
 
      private static const CHUNK_FACES:int = 16672;
 
 
      public var parents:Vector.<Object3D>;
 
      public var textureMaterials:Vector.<TextureMaterial>;
 
      public var objects:Vector.<Object3D>;
 
      private var objectDatas:Object;
 
      private var materialDatas:Object;
 
      private var animationDatas:Array;
 
      private var data:ByteArray;
 
      public var materials:Vector.<Material>;
 
      public function Parser3DS()
      {
        super();
      }
 
      private function parseMainChunk(dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case CHUNK_VERSION:
              break;
            case CHUNK_SCENE:
              this.parse3DChunk(chunkInfo.dataPosition,chunkInfo.dataSize);
              break;
            case CHUNK_ANIMATION:
              this.parseAnimationChunk(chunkInfo.dataPosition,chunkInfo.dataSize);
        }
        this.parseMainChunk(chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
      private function parseObjectAnimationChunk(animation:AnimationData, dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case 45072:
              animation.objectName = this.getString(this.data.position);
              this.data.position = this.data.position + 4;
              animation.parentIndex = this.data.readUnsignedShort();
              break;
            case 45073:
              animation.objectName = this.getString(this.data.position);
              break;
            case 45075:
              animation.pivot = new Vector3D(this.data.readFloat(),this.data.readFloat(),this.data.readFloat());
              break;
            case 45088:
              this.data.position = this.data.position + 20;
              animation.position = new Vector3D(this.data.readFloat(),this.data.readFloat(),this.data.readFloat());
              break;
            case 45089:
              this.data.position = this.data.position + 20;
              animation.rotation = this.getRotationFrom3DSAngleAxis(this.data.readFloat(),this.data.readFloat(),this.data.readFloat(),this.data.readFloat());
              break;
            case 45090:
              this.data.position = this.data.position + 20;
              animation.scale = new Vector3D(this.data.readFloat(),this.data.readFloat(),this.data.readFloat());
        }
        this.parseObjectAnimationChunk(animation,chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
        private function parseFaces(_arg1:ObjectData, _arg2:ChunkInfo):void{
            var _local3:int = this.data.readUnsignedShort();
            _arg1.faces = new Vector.<int>();
            var _local4:int;
            var _local5:int;
            while (_local4 < _local3) {
                var _temp1 = _local5;
                _local5 = (_local5 + 1);
                var _local7 = _temp1;
                _arg1.faces[_local7] = this.data.readUnsignedShort();
                var _temp2 = _local5;
                _local5 = (_local5 + 1);
                var _local8 = _temp2;
                _arg1.faces[_local8] = this.data.readUnsignedShort();
                var _temp3 = _local5;
                _local5 = (_local5 + 1);
                var _local9 = _temp3;
                _arg1.faces[_local9] = this.data.readUnsignedShort();
                this.data.position = (this.data.position + 2);
                _local4++;
            };
            var _local6:int = (2 + (8 * _local3));
            this.parseFacesChunk(_arg1, (_arg2.dataPosition + _local6), (_arg2.dataSize - _local6));
        }
 
      private function readChunkInfo(dataPosition:int) : ChunkInfo
      {
        this.data.position = dataPosition;
        var chunkInfo:ChunkInfo = new ChunkInfo();
        chunkInfo.id = this.data.readUnsignedShort();
        chunkInfo.size = this.data.readUnsignedInt();
        chunkInfo.dataSize = chunkInfo.size - 6;
        chunkInfo.dataPosition = this.data.position;
        chunkInfo.nextChunkPosition = dataPosition + chunkInfo.size;
        return chunkInfo;
      }
 
      private function getString(index:int) : String
      {
        var charCode:int = 0;
        this.data.position = index;
        for(var res:String = ""; (charCode = int(this.data.readByte())) != 0; )
        {
            res = res + String.fromCharCode(charCode);
        }
        return res;
      }
 
      private function parseMapChunk(materialName:String, map:MapData, dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case 41728:
              map.filename = this.getString(chunkInfo.dataPosition).toLowerCase();
              break;
            case 41809:
              break;
            case 41812:
              map.scaleU = this.data.readFloat();
              break;
            case 41814:
              map.scaleV = this.data.readFloat();
              break;
            case 41816:
              map.offsetU = this.data.readFloat();
              break;
            case 41818:
              map.offsetV = this.data.readFloat();
              break;
            case 41820:
              map.rotation = this.data.readFloat();
        }
        this.parseMapChunk(materialName,map,chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
        private function parseVertices(_arg1:ObjectData):void{
            var _local2:int = this.data.readUnsignedShort();
            _arg1.vertices = new Vector.<Number>();
            var _local3:int;
            var _local4:int;
            while (_local3 < _local2) {
                var _temp1 = _local4;
                _local4 = (_local4 + 1);
                var _local5 = _temp1;
                _arg1.vertices[_local5] = this.data.readFloat();
                var _temp2 = _local4;
                _local4 = (_local4 + 1);
                var _local6 = _temp2;
                _arg1.vertices[_local6] = this.data.readFloat();
                var _temp3 = _local4;
                _local4 = (_local4 + 1);
                var _local7 = _temp3;
                _arg1.vertices[_local7] = this.data.readFloat();
                _local3++;
            };
        }
 
      private function parseMeshChunk(object:ObjectData, dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case CHUNK_VERTICES:
              this.parseVertices(object);
              break;
            case CHUNK_MAPPINGCOORDS:
              this.parseUVs(object);
              break;
            case CHUNK_TRANSFORMATION:
              this.parseMatrix(object);
              break;
            case CHUNK_FACES:
              this.parseFaces(object,chunkInfo);
        }
        this.parseMeshChunk(object,chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
      private function parseMaterialChunk(material:MaterialData, dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case 40960:
              this.parseMaterialName(material);
              break;
            case 40976:
              break;
            case 40992:
              this.data.position = chunkInfo.dataPosition + 6;
              material.color = (this.data.readUnsignedByte() << 16) + (this.data.readUnsignedByte() << 8) + this.data.readUnsignedByte();
              break;
            case 41008:
              break;
            case 41024:
              this.data.position = chunkInfo.dataPosition + 6;
              material.glossiness = this.data.readUnsignedShort();
              break;
            case 41025:
              this.data.position = chunkInfo.dataPosition + 6;
              material.specular = this.data.readUnsignedShort();
              break;
            case 41040:
              this.data.position = chunkInfo.dataPosition + 6;
              material.transparency = this.data.readUnsignedShort();
              break;
            case 41472:
              material.diffuseMap = new MapData();
              this.parseMapChunk(material.name,material.diffuseMap,chunkInfo.dataPosition,chunkInfo.dataSize);
              break;
            case 41786:
              break;
            case 41488:
              material.opacityMap = new MapData();
              this.parseMapChunk(material.name,material.opacityMap,chunkInfo.dataPosition,chunkInfo.dataSize);
              break;
            case 41520:
              break;
            case 41788:
              break;
            case 41476:
              break;
            case 41789:
              break;
            case 41504:
        }
        this.parseMaterialChunk(material,chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
      public function getObjectByName(name:String) : Object3D
      {
        var object:* = null;
        for each(object in this.objects)
        {
            if(object.name == name)
            {
              return object;
            }
        }
        return null;
      }
 
        private function parseAnimationChunk(_arg1:int, _arg2:int):void{
            var _local3:ChunkInfo;
            var _local4:AnimationData;
            while (_arg2 >= 6) {
                _local3 = this.readChunkInfo(_arg1);
                switch (_local3.id){
                    case 45057:
                    case 45058:
                    case 45059:
                    case 45060:
                    case 45061:
                    case 45062:
                    case 45063:
                        if (this.animationDatas == null){
                            this.animationDatas = new Array();
                        };
                        _local4 = new AnimationData();
                        this.animationDatas.push(_local4);
                        this.parseObjectAnimationChunk(_local4, _local3.dataPosition, _local3.dataSize);
                        break;
                    case 45064:
                        break;
                };
                _arg1 = _local3.nextChunkPosition;
                _arg2 = (_arg2 - _local3.size);
            };
        }


Сергей1234 13.10.2016 01:01

Код 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);
              }
            }
        }
      }


Сергей1234 13.10.2016 01:02

Код AS3:

      private function getRotationFrom3DSAngleAxis(angle:Number, x:Number, z:Number, y:Number) : Vector3D
      {
        var half:Number = NaN;
        var res:Vector3D = new Vector3D();
        var s:Number = Math.sin(angle);
        var c:Number = Math.cos(angle);
        var t:Number = 1 - c;
        var k:Number = x * y * t + z * s;
        if(k >= 1)
        {
            half = angle / 2;
            res.z = -2 * Math.atan2(x * Math.sin(half),Math.cos(half));
            res.y = -Math.PI / 2;
            res.x = 0;
            return res;
        }
        if(k <= -1)
        {
            half = angle / 2;
            res.z = 2 * Math.atan2(x * Math.sin(half),Math.cos(half));
            res.y = Math.PI / 2;
            res.x = 0;
            return res;
        }
        res.z = -Math.atan2(y * s - x * z * t,1 - (y * y + z * z) * t);
        res.y = -Math.asin(x * y * t + z * s);
        res.x = -Math.atan2(x * s - y * z * t,1 - (x * x + z * z) * t);
        return res;
      }
 
      public function parse(data:ByteArray, texturesBaseURL:String = "", scale:Number = 1) : void
      {
        if(data.bytesAvailable < 6)
        {
            return;
        }
        this.data = data;
        data.endian = Endian.LITTLE_ENDIAN;
        this.parse3DSChunk(data.position,data.bytesAvailable);
        this.objects = new Vector.<Object3D>();
        this.parents = new Vector.<Object3D>();
        this.materials = new Vector.<Material>();
        this.textureMaterials = new Vector.<TextureMaterial>();
        this.buildContent(texturesBaseURL,scale);
        data = null;
        this.objectDatas = null;
        this.animationDatas = null;
        this.materialDatas = null;
      }
 
      private function parseMaterialName(material:MaterialData) : void
      {
        if(this.materialDatas == null)
        {
            this.materialDatas = new Object();
        }
        material.name = this.getString(this.data.position);
        this.materialDatas[material.name] = material;
      }
 
      private function parseMatrix(object:ObjectData) : void
      {
        object.a = this.data.readFloat();
        object.e = this.data.readFloat();
        object.i = this.data.readFloat();
        object.b = this.data.readFloat();
        object.f = this.data.readFloat();
        object.j = this.data.readFloat();
        object.c = this.data.readFloat();
        object.g = this.data.readFloat();
        object.k = this.data.readFloat();
        object.d = this.data.readFloat();
        object.h = this.data.readFloat();
        object.l = this.data.readFloat();
      }
 
      private function parseFacesChunk(object:ObjectData, dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case CHUNK_FACESMATERIAL:
              this.parseSurface(object);
        }
        this.parseFacesChunk(object,chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
      private function parseSurface(object:ObjectData) : void
      {
        if(object.surfaces == null)
        {
            object.surfaces = new Object();
        }
        var surface:Vector.<int> = new Vector.<int>();
        object.surfaces[this.getString(this.data.position)] = surface;
        var num:int = this.data.readUnsignedShort();
        for(var i:int = 0; i < num; i++)
        {
            surface[i] = this.data.readUnsignedShort();
        }
      }
 
      private function parseObjectChunk(object:ObjectData, dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        switch(chunkInfo.id)
        {
            case CHUNK_TRIMESH:
              this.parseMeshChunk(object,chunkInfo.dataPosition,chunkInfo.dataSize);
              break;
            case 17920:
              break;
            case 18176:
        }
        this.parseObjectChunk(object,chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
 
      private function parse3DSChunk(dataPosition:int, bytesAvailable:int) : void
      {
        if(bytesAvailable < 6)
        {
            return;
        }
        var chunkInfo:ChunkInfo = this.readChunkInfo(dataPosition);
        this.data.position = dataPosition;
        switch(chunkInfo.id)
        {
            case CHUNK_MAIN:
              this.parseMainChunk(chunkInfo.dataPosition,chunkInfo.dataSize);
        }
        this.parse3DSChunk(chunkInfo.nextChunkPosition,bytesAvailable - chunkInfo.size);
      }
  }
}
 
class MapData
{
 
 
  public var offsetU:Number = 0;
 
  public var offsetV:Number = 0;
 
  public var filename:String;
 
  public var scaleU:Number = 1;
 
  public var scaleV:Number = 1;
 
  public var rotation:Number = 0;
 
  function MapData()
  {
      super();
  }
}
 
import flash.geom.Vector3D;
import alternativa.engine3d.core.Object3D;
 
class AnimationData
{
 
 
  public var pivot:Vector3D;
 
  public var isInstance:Boolean;
 
  public var parentIndex:int;
 
  public var position:Vector3D;
 
  public var objectName:String;
 
  public var scale:Vector3D;
 
  public var rotation:Vector3D;
 
  public var object:Object3D;
 
  function AnimationData()
  {
      super();
  }
}
 
import flash.geom.Matrix;
import alternativa.engine3d.materials.Material;
 
class MaterialData
{
 
 
  public var matrix:Matrix;
 
  public var specular:int;
 
  public var material:Material;
 
  public var color:int;
 
  public var name:String;
 
  public var opacityMap:MapData;
 
  public var transparency:int;
 
  public var diffuseMap:MapData;
 
  public var glossiness:int;
 
  function MaterialData()
  {
      super();
  }
}
 
class ChunkInfo
{
 
 
  public var nextChunkPosition:int;
 
  public var size:int;
 
  public var dataPosition:int;
 
  public var dataSize:int;
 
  public var id:int;
 
  function ChunkInfo()
  {
      super();
  }
}
 
class ObjectData
{
 
 
  public var name:String;
 
  public var a:Number;
 
  public var b:Number;
 
  public var c:Number;
 
  public var e:Number;
 
  public var surfaces:Object;
 
  public var g:Number;
 
  public var h:Number;
 
  public var i:Number;
 
  public var j:Number;
 
  public var d:Number;
 
  public var f:Number;
 
  public var uvs:Vector.<Number>;
 
  public var l:Number;
 
  public var faces:Vector.<int>;
 
  public var vertices:Vector.<Number>;
 
  public var k:Number;
 
  function ObjectData()
  {
      super();
  }
}

Добавлено через 41 секунду
Parser3DS

Добавлено через 1 минуту
Цитата:

Сообщение от caseyryan (Сообщение 1196214)
recycle?)
Какой класс то? Из закрытой либы что ли?

Да из закрытой либы

Добавлено через 2 минуты
Надеюсь поможете

Bletraut 13.10.2016 23:15

Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.

Добавлено через 10 минут
А нет, пардон. Принял класс в котором матрицы рассчитываются за код из декомпилятора.

Добавлено через 16 минут
Собственно, лучше исходники в студию. Может я смогу поправить.

Сергей1234 13.10.2016 23:55

Цитата:

Сообщение от Bletraut (Сообщение 1196736)
Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.

Добавлено через 10 минут
А нет, пардон. Принял класс в котором матрицы рассчитываются за код из декомпилятора.

Добавлено через 16 минут
Собственно, лучше исходники в студию. Может я смогу поправить.

Дело в том. Что этот класс тоже нормально работает

Добавлено через 47 секунд
Цитата:

Сообщение от Bletraut (Сообщение 1196736)
Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.

Добавлено через 10 минут
А нет, пардон. Принял класс в котором матрицы рассчитываются за код из декомпилятора.

Добавлено через 16 минут
Собственно, лучше исходники в студию. Может я смогу поправить.

Проверял в FlashDevelop

Добавлено через 2 минуты
Цитата:

Сообщение от Bletraut (Сообщение 1196736)
Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.

Добавлено через 10 минут
А нет, пардон. Принял класс в котором матрицы рассчитываются за код из декомпилятора.

Добавлено через 16 минут
Собственно, лучше исходники в студию. Может я смогу поправить.

Дело в том что в swf не работает нормально не этот класс, не класс из либы.

Добавлено через 5 минут
Уточну: Из либы не работает класс именно в режиме release. А вот в debug работает без нареканий.


Часовой пояс GMT +4, время: 02:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.