Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Закрытая тема
Старый 10.09.2016, 16:47
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 11  
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Все мы ходим или ходили под старлингом. А Даниелька да, с абстракцией и кэшированием подружился и выкатил версию старлинг 2.0.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.09.2016, 16:23
Сергей1234 вне форума Посмотреть профиль Отправить личное сообщение для Сергей1234 Найти все сообщения от Сергей1234
  № 12  
Сергей1234

Регистрация: Sep 2016
Сообщений: 14
Помогите переработать класс!

Старый 17.09.2016, 16:26
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 13  
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Ну давац поможим, выкладывацй классс
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 17.09.2016, 20:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 14  
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Сообщение от Сергей1234 Посмотреть сообщение
Помогите переработать класс!
recycle?)
Какой класс то? Из закрытой либы что ли?
__________________
Ко мне можно и нужно обращаться на ты)

Старый 19.09.2016, 12:50
Eric Gurt вне форума Посмотреть профиль Отправить личное сообщение для Eric Gurt Посетить домашнюю страницу Eric Gurt Найти все сообщения от Eric Gurt
  № 15  
Eric Gurt
 
Аватар для Eric Gurt

Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
Цитата:
Сообщение от Сергей1234 Посмотреть сообщение
Помогите переработать класс!
Если что-то "лагает" то можно использовать SWFScoutEnabler и Adobe Scout CC для того чтобы посмотреть что именно "лагает" и выполняется дольше обычного.
__________________
x << 2;

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

Регистрация: Sep 2016
Сообщений: 14
Код 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);
            };
        }

Старый 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);
               }
            }
         }
      }

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

Регистрация: Sep 2016
Сообщений: 14
Код 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 Посмотреть сообщение
recycle?)
Какой класс то? Из закрытой либы что ли?
Да из закрытой либы

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

Старый 13.10.2016, 23:15
Bletraut вне форума Посмотреть профиль Отправить личное сообщение для Bletraut Найти все сообщения от Bletraut
  № 19  
Bletraut
 
Аватар для Bletraut

Регистрация: Mar 2013
Адрес: Вне пространства.
Сообщений: 566
Отправить сообщение для Bletraut с помощью ICQ Отправить сообщение для Bletraut с помощью Skype™
Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.

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

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

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

Регистрация: Sep 2016
Сообщений: 14
Цитата:
Сообщение от Bletraut Посмотреть сообщение
Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.

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

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

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

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

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

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

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

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

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

Создать новую тему Закрытая тема Часовой пояс GMT +4, время: 23:10.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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