Форум 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)

Сергей1234 02.09.2016 21:22

Та самая ошибка 1009
 
Помогите!
Я использовал либу Alternativa 7.8.0
Компилирую в FD
Когда использовал режим Debug у меня было всё нормально, но когда я начал использовать режим release У меня залагал класс Parser3DS(alternativa.engine3d.loaders.Parser3DS)
Заранее спасибо!

Bletraut 04.09.2016 14:27

У альтернативы раньше был форум, напиши там. Или если и у тебя есть исходный код движка, то открой этот парсер и в ручную ищи место лагов.

caseyryan 05.09.2016 09:14

Даже они сами давно забили на свой движок, и перешли на юнити

undefined 05.09.2016 11:50

интересно, зачем там еще один движок если юнити сам 3D?

Zebestov 05.09.2016 13:11

undefined, речь идет не о движке.

undefined 05.09.2016 14:43

Цитата:

Сообщение от Zebestov (Сообщение 1196003)
undefined, речь идет не о движке.

В смысле они не писали свой движок, а взяли готовый из юнити?

Zebestov 05.09.2016 14:47

В смысле они просто взяли готовый юнити.

dimarik 07.09.2016 22:01

Ага. Нужно гонцов отправить в адоб, прошевелить их маркетинг. Я щаз приСел за Unity по обстоятельствам. ППЦ, я даже словить эвент от WWW (aka Loader по-флешовски) загрузчика не могу, нужно корутину запускать, которая в каждом кадре будет проверять, загрузилось ли все это безобразие. Тлен и тоска.

А вы в курсе, что в Unity garbage collector работает на полную катушку? Вы гляньте на код кнопки. Она создается каждый раз при вызове OnGui. Хех, да тот же Jacksondustan провел немало времени на минимизацию импактов от GC для юнити на си шарп.

Tails 08.09.2016 11:19

Цитата:

Сообщение от dimarik (Сообщение 1196039)
в каждом кадре будет проверять

Вот это вот очень печально.

Eric Gurt 10.09.2016 04:02

Честно говоря пробовал Alternativa 3D, но потом очень быстро бросил и перешел на Away3D, который оказался "допиленее", хотя тоже брошенный как Flash движок. Тем не менее удалось очень многое изменить/дополнить в результате чего движок вполне справляется с задачами разрабатываемой игры.

Сейчас бы попробовал Starling т.к. в нем есть определенные 3D возможности, хоть это первоначально и был 2D движок. График обновлений исходников намекает на его жизнь https://github.com/Gamua/Starling-Fr...s/contributors

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 работает без нареканий.

Bletraut 14.10.2016 16:48

Плеер обнови. Есть разные версии плеера дебаг и релиз. Возможно, что релизный старый.

Psycho Tiger 14.10.2016 19:30

Цитата:

А нет, пардон. Принял класс в котором матрицы рассчитываются за код из декомпилятора.
Genuine handcrafted code by legal US residents, ага. :D
Код AS3:

                _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);


Bletraut 15.10.2016 16:54

Цитата:

Genuine handcrafted code by legal US residents, ага.
Я тоже так подумал, но разве это не переменные 3d матрицы 4х4?

Добавлено через 1 минуту
Ахахаха, да. Действительно, это код из декомпилятора. А я принял его за обозначение компонентов матрицы.

dimarik 19.10.2016 23:11

Судьба у него такая. Аминь.


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

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