Показать сообщение отдельно
Старый 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 минуты
Надеюсь поможете