|
|
|||||
.
|
Все мы ходим или ходили под старлингом. А Даниелька да, с абстракцией и кэшированием подружился и выкатил версию старлинг 2.0.
|
|
|||||
Регистрация: Sep 2016
Сообщений: 14
|
Помогите переработать класс!
|
|
|||||
Регистрация: Oct 2006
Адрес: https://twitter.com/Eric_Gurt
Сообщений: 393
|
Если что-то "лагает" то можно использовать SWFScoutEnabler и Adobe Scout CC для того чтобы посмотреть что именно "лагает" и выполняется дольше обычного.
__________________
x << 2; |
|
|||||
Регистрация: Sep 2016
Сообщений: 14
|
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); }; } |
|
|||||
Регистрация: Sep 2016
Сообщений: 14
|
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); } } } } |
|
|||||
Регистрация: Sep 2016
Сообщений: 14
|
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(); } } Parser3DS Добавлено через 1 минуту Да из закрытой либы Добавлено через 2 минуты Надеюсь поможете |
|
|||||
Чёт я в голосину. Это из декомпилятора чтоли выдрано? Думаю тут никто даже не будет смотреть в этот код, не то что переделывать.
Добавлено через 10 минут А нет, пардон. Принял класс в котором матрицы рассчитываются за код из декомпилятора. Добавлено через 16 минут Собственно, лучше исходники в студию. Может я смогу поправить.
__________________
Я заклинаю вас действовать иначе. |
|
|||||
Регистрация: Sep 2016
Сообщений: 14
|
Цитата:
Добавлено через 47 секунд Цитата:
Добавлено через 2 минуты Цитата:
Добавлено через 5 минут Уточну: Из либы не работает класс именно в режиме release. А вот в debug работает без нареканий. |
Часовой пояс GMT +4, время: 17:48. |
|
« Предыдущая тема | Следующая тема » |
|
|